ruby-oci8-master 2.0.7

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.
Files changed (84) hide show
  1. data/ChangeLog +2321 -0
  2. data/Makefile +88 -0
  3. data/NEWS +303 -0
  4. data/README +76 -0
  5. data/VERSION +1 -0
  6. data/dist-files +83 -0
  7. data/doc/api.en.html +527 -0
  8. data/doc/api.en.rd +554 -0
  9. data/doc/api.ja.html +525 -0
  10. data/doc/api.ja.rd +557 -0
  11. data/doc/manual.css +35 -0
  12. data/ext/oci8/.document +18 -0
  13. data/ext/oci8/MANIFEST +18 -0
  14. data/ext/oci8/apiwrap.c.tmpl +182 -0
  15. data/ext/oci8/apiwrap.h.tmpl +61 -0
  16. data/ext/oci8/apiwrap.rb +91 -0
  17. data/ext/oci8/apiwrap.yml +1455 -0
  18. data/ext/oci8/attr.c +105 -0
  19. data/ext/oci8/bind.c +366 -0
  20. data/ext/oci8/connection_pool.c +199 -0
  21. data/ext/oci8/encoding.c +289 -0
  22. data/ext/oci8/env.c +178 -0
  23. data/ext/oci8/error.c +378 -0
  24. data/ext/oci8/extconf.rb +179 -0
  25. data/ext/oci8/lob.c +805 -0
  26. data/ext/oci8/metadata.c +232 -0
  27. data/ext/oci8/object.c +727 -0
  28. data/ext/oci8/oci8.c +1156 -0
  29. data/ext/oci8/oci8.h +574 -0
  30. data/ext/oci8/oci8lib.c +527 -0
  31. data/ext/oci8/ocidatetime.c +484 -0
  32. data/ext/oci8/ocihandle.c +751 -0
  33. data/ext/oci8/ocinumber.c +1612 -0
  34. data/ext/oci8/oraconf.rb +1119 -0
  35. data/ext/oci8/oradate.c +611 -0
  36. data/ext/oci8/oranumber_util.c +352 -0
  37. data/ext/oci8/oranumber_util.h +24 -0
  38. data/ext/oci8/post-config.rb +5 -0
  39. data/ext/oci8/stmt.c +673 -0
  40. data/ext/oci8/thread_util.c +85 -0
  41. data/ext/oci8/thread_util.h +30 -0
  42. data/ext/oci8/win32.c +137 -0
  43. data/lib/.document +1 -0
  44. data/lib/dbd/OCI8.rb +591 -0
  45. data/lib/oci8.rb.in +94 -0
  46. data/lib/oci8/.document +8 -0
  47. data/lib/oci8/bindtype.rb +349 -0
  48. data/lib/oci8/compat.rb +113 -0
  49. data/lib/oci8/connection_pool.rb +99 -0
  50. data/lib/oci8/datetime.rb +611 -0
  51. data/lib/oci8/encoding-init.rb +74 -0
  52. data/lib/oci8/encoding.yml +537 -0
  53. data/lib/oci8/metadata.rb +2132 -0
  54. data/lib/oci8/object.rb +581 -0
  55. data/lib/oci8/oci8.rb +721 -0
  56. data/lib/oci8/ocihandle.rb +425 -0
  57. data/lib/oci8/oracle_version.rb +144 -0
  58. data/lib/oci8/properties.rb +73 -0
  59. data/metaconfig +142 -0
  60. data/pre-distclean.rb +7 -0
  61. data/ruby-oci8.gemspec +63 -0
  62. data/setup.rb +1331 -0
  63. data/test/README +4 -0
  64. data/test/config.rb +122 -0
  65. data/test/test_all.rb +51 -0
  66. data/test/test_appinfo.rb +63 -0
  67. data/test/test_array_dml.rb +333 -0
  68. data/test/test_bind_raw.rb +46 -0
  69. data/test/test_bind_time.rb +178 -0
  70. data/test/test_break.rb +96 -0
  71. data/test/test_clob.rb +82 -0
  72. data/test/test_connstr.rb +81 -0
  73. data/test/test_datetime.rb +582 -0
  74. data/test/test_dbi.rb +366 -0
  75. data/test/test_dbi_clob.rb +53 -0
  76. data/test/test_encoding.rb +100 -0
  77. data/test/test_error.rb +88 -0
  78. data/test/test_metadata.rb +1399 -0
  79. data/test/test_oci8.rb +434 -0
  80. data/test/test_oracle_version.rb +70 -0
  81. data/test/test_oradate.rb +256 -0
  82. data/test/test_oranumber.rb +746 -0
  83. data/test/test_rowid.rb +33 -0
  84. metadata +137 -0
@@ -0,0 +1,425 @@
1
+ #--
2
+ # ocihandle.rb -- Constants in OCIHandle.
3
+ #
4
+ # Copyright (C) 2010 KUBO Takehiro <kubo@jiubao.org>
5
+ #++
6
+
7
+ class OCIHandle
8
+
9
+ #################################
10
+ #
11
+ # Attribute Types in oci.h
12
+ #
13
+ #################################
14
+
15
+ # maximum size of the data
16
+ OCI_ATTR_DATA_SIZE = 1
17
+
18
+ # the SQL type of the column/argument
19
+ OCI_ATTR_DATA_TYPE = 2
20
+ # the name of the column/argument
21
+ OCI_ATTR_NAME = 4
22
+ # precision if number type
23
+ OCI_ATTR_PRECISION = 5
24
+ # scale if number type
25
+ OCI_ATTR_SCALE = 6
26
+ # is it null ?
27
+ OCI_ATTR_IS_NULL = 7
28
+ # name of the named data type or a package name
29
+ OCI_ATTR_TYPE_NAME = 8
30
+ # the schema name
31
+ OCI_ATTR_SCHEMA_NAME = 9
32
+ # type name if package private type
33
+ OCI_ATTR_SUB_NAME = 10
34
+ # relative position
35
+ OCI_ATTR_POSITION = 11
36
+ # packed decimal scale
37
+ OCI_ATTR_PDSCL = 16
38
+ # fs prec for datetime data types
39
+ OCI_ATTR_FSPRECISION = OCI_ATTR_PDSCL
40
+ # packed decimal format
41
+ OCI_ATTR_PDPRC = 17
42
+ # fs prec for datetime data types
43
+ OCI_ATTR_LFPRECISION = OCI_ATTR_PDPRC
44
+ # username attribute
45
+ OCI_ATTR_USERNAME = 22
46
+ # password attribute
47
+ OCI_ATTR_PASSWORD = 23
48
+ # Character Set ID
49
+ OCI_ATTR_CHARSET_ID = 31
50
+ # Character Set Form
51
+ OCI_ATTR_CHARSET_FORM = 32
52
+ # number of columns
53
+ OCI_ATTR_NUM_COLS = 102
54
+ # parameter of the column list
55
+ OCI_ATTR_LIST_COLUMNS = 103
56
+ # DBA of the segment header
57
+ OCI_ATTR_RDBA = 104
58
+ # whether the table is clustered
59
+ OCI_ATTR_CLUSTERED = 105
60
+ # whether the table is partitioned
61
+ OCI_ATTR_PARTITIONED = 106
62
+ # whether the table is index only
63
+ OCI_ATTR_INDEX_ONLY = 107
64
+ # parameter of the argument list
65
+ OCI_ATTR_LIST_ARGUMENTS = 108
66
+ # parameter of the subprogram list
67
+ OCI_ATTR_LIST_SUBPROGRAMS = 109
68
+ # REF to the type descriptor
69
+ OCI_ATTR_REF_TDO = 110
70
+ # the database link name
71
+ OCI_ATTR_LINK = 111
72
+ # minimum value
73
+ OCI_ATTR_MIN = 112
74
+ # maximum value
75
+ OCI_ATTR_MAX = 113
76
+ # increment value
77
+ OCI_ATTR_INCR = 114
78
+ # number of sequence numbers cached
79
+ OCI_ATTR_CACHE = 115
80
+ # whether the sequence is ordered
81
+ OCI_ATTR_ORDER = 116
82
+ # high-water mark
83
+ OCI_ATTR_HW_MARK = 117
84
+ # type's schema name
85
+ OCI_ATTR_TYPE_SCHEMA = 118
86
+ # timestamp of the object
87
+ OCI_ATTR_TIMESTAMP = 119
88
+ # number of parameters
89
+ OCI_ATTR_NUM_PARAMS = 121
90
+ # object id for a table or view
91
+ OCI_ATTR_OBJID = 122
92
+ # overload ID for funcs and procs
93
+ OCI_ATTR_OVERLOAD_ID = 125
94
+ # table name space
95
+ OCI_ATTR_TABLESPACE = 126
96
+ # list type
97
+ OCI_ATTR_LTYPE = 128
98
+ # whether table is temporary
99
+ OCI_ATTR_IS_TEMPORARY = 130
100
+ # whether table is typed
101
+ OCI_ATTR_IS_TYPED = 131
102
+ # duration of temporary table
103
+ OCI_ATTR_DURATION = 132
104
+ # is invoker rights
105
+ OCI_ATTR_IS_INVOKER_RIGHTS = 133
106
+ # top level schema obj name
107
+ OCI_ATTR_OBJ_NAME = 134
108
+ # schema name
109
+ OCI_ATTR_OBJ_SCHEMA = 135
110
+ # top level schema object id
111
+ OCI_ATTR_OBJ_ID = 136
112
+
113
+ OCI_ATTR_CONN_NOWAIT = 178
114
+ OCI_ATTR_CONN_BUSY_COUNT = 179
115
+ OCI_ATTR_CONN_OPEN_COUNT = 180
116
+ OCI_ATTR_CONN_TIMEOUT = 181
117
+ OCI_ATTR_CONN_MIN = 183
118
+ OCI_ATTR_CONN_MAX = 184
119
+ OCI_ATTR_CONN_INCR = 185
120
+
121
+ # is this position overloaded
122
+ OCI_ATTR_OVERLOAD = 210
123
+ # level for structured types
124
+ OCI_ATTR_LEVEL = 211
125
+ # has a default value
126
+ OCI_ATTR_HAS_DEFAULT = 212
127
+ # in, out inout
128
+ OCI_ATTR_IOMODE = 213
129
+ # returns a radix
130
+ OCI_ATTR_RADIX = 214
131
+ # total number of arguments
132
+ OCI_ATTR_NUM_ARGS = 215
133
+ # object or collection
134
+ OCI_ATTR_TYPECODE = 216
135
+ # varray or nested table
136
+ OCI_ATTR_COLLECTION_TYPECODE = 217
137
+ # user assigned version
138
+ OCI_ATTR_VERSION = 218
139
+ # is this an incomplete type
140
+ OCI_ATTR_IS_INCOMPLETE_TYPE = 219
141
+ # a system type
142
+ OCI_ATTR_IS_SYSTEM_TYPE = 220
143
+ # a predefined type
144
+ OCI_ATTR_IS_PREDEFINED_TYPE = 221
145
+ # a transient type
146
+ OCI_ATTR_IS_TRANSIENT_TYPE = 222
147
+ # system generated type
148
+ OCI_ATTR_IS_SYSTEM_GENERATED_TYPE = 223
149
+ # contains nested table attr
150
+ OCI_ATTR_HAS_NESTED_TABLE = 224
151
+ # has a lob attribute
152
+ OCI_ATTR_HAS_LOB = 225
153
+ # has a file attribute
154
+ OCI_ATTR_HAS_FILE = 226
155
+ # has a collection attribute
156
+ OCI_ATTR_COLLECTION_ELEMENT = 227
157
+ # number of attribute types
158
+ OCI_ATTR_NUM_TYPE_ATTRS = 228
159
+ # list of type attributes
160
+ OCI_ATTR_LIST_TYPE_ATTRS = 229
161
+ # number of type methods
162
+ OCI_ATTR_NUM_TYPE_METHODS = 230
163
+ # list of type methods
164
+ OCI_ATTR_LIST_TYPE_METHODS = 231
165
+ # map method of type
166
+ OCI_ATTR_MAP_METHOD = 232
167
+ # order method of type
168
+ OCI_ATTR_ORDER_METHOD = 233
169
+ # number of elements
170
+ OCI_ATTR_NUM_ELEMS = 234
171
+ # encapsulation level
172
+ OCI_ATTR_ENCAPSULATION = 235
173
+ # method selfish
174
+ OCI_ATTR_IS_SELFISH = 236
175
+ # virtual
176
+ OCI_ATTR_IS_VIRTUAL = 237
177
+ # inline
178
+ OCI_ATTR_IS_INLINE = 238
179
+ # constant
180
+ OCI_ATTR_IS_CONSTANT = 239
181
+ # has result
182
+ OCI_ATTR_HAS_RESULT = 240
183
+ # constructor
184
+ OCI_ATTR_IS_CONSTRUCTOR = 241
185
+ # destructor
186
+ OCI_ATTR_IS_DESTRUCTOR = 242
187
+ # operator
188
+ OCI_ATTR_IS_OPERATOR = 243
189
+ # a map method
190
+ OCI_ATTR_IS_MAP = 244
191
+ # order method
192
+ OCI_ATTR_IS_ORDER = 245
193
+ # read no data state method
194
+ OCI_ATTR_IS_RNDS = 246
195
+ # read no process state
196
+ OCI_ATTR_IS_RNPS = 247
197
+ # write no data state method
198
+ OCI_ATTR_IS_WNDS = 248
199
+ # write no process state
200
+ OCI_ATTR_IS_WNPS = 249
201
+ OCI_ATTR_IS_SUBTYPE = 258
202
+ OCI_ATTR_SUPERTYPE_SCHEMA_NAME = 259
203
+ OCI_ATTR_SUPERTYPE_NAME = 260
204
+ # list of objects in schema
205
+ OCI_ATTR_LIST_OBJECTS = 261
206
+ # char set id
207
+ OCI_ATTR_NCHARSET_ID = 262
208
+ # list of schemas
209
+ OCI_ATTR_LIST_SCHEMAS = 263
210
+ # max procedure length
211
+ OCI_ATTR_MAX_PROC_LEN = 264
212
+ # max column name length
213
+ OCI_ATTR_MAX_COLUMN_LEN = 265
214
+ # cursor commit behavior
215
+ OCI_ATTR_CURSOR_COMMIT_BEHAVIOR = 266
216
+ # catalog namelength
217
+ OCI_ATTR_MAX_CATALOG_NAMELEN = 267
218
+ # catalog location
219
+ OCI_ATTR_CATALOG_LOCATION = 268
220
+ # savepoint support
221
+ OCI_ATTR_SAVEPOINT_SUPPORT = 269
222
+ # nowait support
223
+ OCI_ATTR_NOWAIT_SUPPORT = 270
224
+ # autocommit DDL
225
+ OCI_ATTR_AUTOCOMMIT_DDL = 271
226
+ # locking mode
227
+ OCI_ATTR_LOCKING_MODE = 272
228
+ # value of client id to set
229
+ OCI_ATTR_CLIENT_IDENTIFIER = 278
230
+ # is final type ?
231
+ OCI_ATTR_IS_FINAL_TYPE = 279
232
+ # is instantiable type ?
233
+ OCI_ATTR_IS_INSTANTIABLE_TYPE = 280
234
+ # is final method ?
235
+ OCI_ATTR_IS_FINAL_METHOD = 281
236
+ # is instantiable method ?
237
+ OCI_ATTR_IS_INSTANTIABLE_METHOD = 282
238
+ # is overriding method ?
239
+ OCI_ATTR_IS_OVERRIDING_METHOD = 283
240
+ # Describe the base object
241
+ OCI_ATTR_DESC_SYNBASE = 284
242
+ # char length semantics
243
+ OCI_ATTR_CHAR_USED = 285
244
+ # char length
245
+ OCI_ATTR_CHAR_SIZE = 286
246
+ # rule condition
247
+ OCI_ATTR_CONDITION = 342
248
+ # comment
249
+ OCI_ATTR_COMMENT = 343
250
+ # Anydata value
251
+ OCI_ATTR_VALUE = 344
252
+ # eval context owner
253
+ OCI_ATTR_EVAL_CONTEXT_OWNER = 345
254
+ # eval context name
255
+ OCI_ATTR_EVAL_CONTEXT_NAME = 346
256
+ # eval function name
257
+ OCI_ATTR_EVALUATION_FUNCTION = 347
258
+ # variable type
259
+ OCI_ATTR_VAR_TYPE = 348
260
+ # variable value function
261
+ OCI_ATTR_VAR_VALUE_FUNCTION = 349
262
+ # variable method function
263
+ OCI_ATTR_VAR_METHOD_FUNCTION = 350
264
+ # action context
265
+ OCI_ATTR_ACTION_CONTEXT = 351
266
+ # list of table aliases
267
+ OCI_ATTR_LIST_TABLE_ALIASES = 352
268
+ # list of variable types
269
+ OCI_ATTR_LIST_VARIABLE_TYPES = 353
270
+ # table name
271
+ OCI_ATTR_TABLE_NAME = 356
272
+
273
+ #################################
274
+ #
275
+ # Various Modes
276
+ #
277
+ #################################
278
+
279
+ # the default value for parameters and attributes
280
+ OCI_DEFAULT = 0
281
+
282
+ #################################
283
+ #
284
+ # Credential Types
285
+ #
286
+ #################################
287
+
288
+ # database username/password credentials
289
+ OCI_CRED_RDBMS = 1
290
+ # externally provided credentials
291
+ OCI_CRED_EXT = 2
292
+
293
+ #################################
294
+ #
295
+ # Authentication Modes
296
+ #
297
+ #################################
298
+
299
+ # for SYSDBA authorization
300
+ OCI_SYSDBA = 0x0002
301
+ # for SYSOPER authorization
302
+ OCI_SYSOPER = 0x0004
303
+
304
+ #################################
305
+ #
306
+ # Attach Modes
307
+ #
308
+ #################################
309
+
310
+ # Attach using server handle from pool
311
+ OCI_CPOOL = 0x0200
312
+
313
+ #################################
314
+ #
315
+ # OCI Parameter Types
316
+ #
317
+ #################################
318
+
319
+ # parameter type for unknown type
320
+ OCI_PTYPE_UNK = 0
321
+ # parameter type for table
322
+ OCI_PTYPE_TABLE = 1
323
+ # parameter type for view
324
+ OCI_PTYPE_VIEW = 2
325
+ # parameter type for procedure
326
+ OCI_PTYPE_PROC = 3
327
+ # parameter type for function
328
+ OCI_PTYPE_FUNC = 4
329
+ # parameter type for package
330
+ OCI_PTYPE_PKG = 5
331
+ # parameter type for user-defined type
332
+ OCI_PTYPE_TYPE = 6
333
+ # parameter type for synonym
334
+ OCI_PTYPE_SYN = 7
335
+ # parameter type for sequence
336
+ OCI_PTYPE_SEQ = 8
337
+ # parameter type for column
338
+ OCI_PTYPE_COL = 9
339
+ # parameter type for argument
340
+ OCI_PTYPE_ARG = 10
341
+ # parameter type for list
342
+ OCI_PTYPE_LIST = 11
343
+ # parameter type for user-defined type's attribute
344
+ OCI_PTYPE_TYPE_ATTR = 12
345
+ # parameter type for collection type's element
346
+ OCI_PTYPE_TYPE_COLL = 13
347
+ # parameter type for user-defined type's method
348
+ OCI_PTYPE_TYPE_METHOD = 14
349
+ # parameter type for user-defined type method's arg
350
+ OCI_PTYPE_TYPE_ARG = 15
351
+ # parameter type for user-defined type method's result
352
+ OCI_PTYPE_TYPE_RESULT = 16
353
+ # parameter type for schema
354
+ OCI_PTYPE_SCHEMA = 17
355
+ # parameter type for database
356
+ OCI_PTYPE_DATABASE = 18
357
+ # parameter type for rule
358
+ OCI_PTYPE_RULE = 19
359
+ # parameter type for rule set
360
+ OCI_PTYPE_RULE_SET = 20
361
+ # parameter type for evaluation context
362
+ OCI_PTYPE_EVALUATION_CONTEXT = 21
363
+ # parameter type for table alias
364
+ OCI_PTYPE_TABLE_ALIAS = 22
365
+ # parameter type for variable type
366
+ OCI_PTYPE_VARIABLE_TYPE = 23
367
+ # parameter type for name value pair
368
+ OCI_PTYPE_NAME_VALUE = 24
369
+
370
+ #################################
371
+ #
372
+ # OCI List Types
373
+ #
374
+ #################################
375
+
376
+ # list type for unknown type
377
+ OCI_LTYPE_UNK = 0
378
+ # list type for column list
379
+ OCI_LTYPE_COLUMN = 1
380
+ # list type for procedure argument list
381
+ OCI_LTYPE_ARG_PROC = 2
382
+ # list type for function argument list
383
+ OCI_LTYPE_ARG_FUNC = 3
384
+ # list type for subprogram list
385
+ OCI_LTYPE_SUBPRG = 4
386
+ # list type for type attribute
387
+ OCI_LTYPE_TYPE_ATTR = 5
388
+ # list type for type method
389
+ OCI_LTYPE_TYPE_METHOD = 6
390
+ # list type for type method w/o result argument list
391
+ OCI_LTYPE_TYPE_ARG_PROC = 7
392
+ # list type for type method w/result argument list
393
+ OCI_LTYPE_TYPE_ARG_FUNC = 8
394
+ # list type for schema object list
395
+ OCI_LTYPE_SCH_OBJ = 9
396
+ # list type for database schema list
397
+ OCI_LTYPE_DB_SCH = 10
398
+ # list type for subtype list
399
+ OCI_LTYPE_TYPE_SUBTYPE = 11
400
+ # list type for table alias list
401
+ OCI_LTYPE_TABLE_ALIAS = 12
402
+ # list type for variable type list
403
+ OCI_LTYPE_VARIABLE_TYPE = 13
404
+ # list type for name value list
405
+ OCI_LTYPE_NAME_VALUE = 14
406
+
407
+ #################################
408
+ #
409
+ # OBJECT Duration in oro.h
410
+ #
411
+ #################################
412
+
413
+ #
414
+ OCI_DURATION_INVALID = 0xFFFF
415
+ OCI_DURATION_BEGIN = 10
416
+ OCI_DURATION_NULL = OCI_DURATION_BEGIN - 1
417
+ OCI_DURATION_DEFAULT = OCI_DURATION_BEGIN - 2
418
+ OCI_DURATION_USER_CALLBACK = OCI_DURATION_BEGIN - 3
419
+ OCI_DURATION_NEXT = OCI_DURATION_BEGIN - 4
420
+ OCI_DURATION_SESSION = OCI_DURATION_BEGIN
421
+ OCI_DURATION_TRANS = OCI_DURATION_BEGIN + 1
422
+ OCI_DURATION_CALL = OCI_DURATION_BEGIN + 2
423
+ OCI_DURATION_STATEMENT = OCI_DURATION_BEGIN + 3
424
+ OCI_DURATION_CALLOUT = OCI_DURATION_BEGIN + 4
425
+ end
@@ -0,0 +1,144 @@
1
+ # oracle_version.rb implements OCI8::OracleVersion.
2
+ #
3
+ # Copyright (C) 2009 KUBO Takehiro <kubo@jiubao.org>
4
+
5
+ #--
6
+
7
+ class OCI8
8
+
9
+ # A data class, representing Oracle version.
10
+ #
11
+ # Oracle version is represented by five numbers:
12
+ # *major*, *minor*, *update*, *patch* and *port_update*.
13
+ class OracleVersion
14
+ include Comparable
15
+
16
+ # The first part of the Oracle version.
17
+ attr_reader :major
18
+ # The second part of the Oracle version.
19
+ attr_reader :minor
20
+ # The third part of the Oracle version.
21
+ attr_reader :update
22
+ # The fifth part of the Oracle version.
23
+ attr_reader :patch
24
+ # The fourth part of the Oracle version.
25
+ attr_reader :port_update
26
+
27
+ # Creates a OCI8::OracleVersion object.
28
+ #
29
+ # If the first argument _arg_ is a String, it is parsed as dotted
30
+ # version string. If it is bigger than 0x08000000, it is parsed as
31
+ # a number contains 5-digit Oracle version. Otherwise, it is used
32
+ # as a major version and the rest arguments are minor, update,
33
+ # patch and port_update. Unspecified version numbers are zeros by
34
+ # default.
35
+ #
36
+ # == Example
37
+ # oraver = OCI8::OracleVersion.new('10.2.0.4')
38
+ # oraver.major # => 10
39
+ # oraver.minor # => 2
40
+ # oraver.update # => 0
41
+ # oraver.patch # => 4
42
+ # oraver.port_update # => 0
43
+ #
44
+ # oraver = OCI8::OracleVersion.new(0x0a200400)
45
+ # oraver.major # => 10
46
+ # oraver.minor # => 2
47
+ # oraver.update # => 0
48
+ # oraver.patch # => 4
49
+ # oraver.port_update # => 0
50
+ def initialize(arg, minor = nil, update = nil, patch = nil, port_update = nil)
51
+ if arg.is_a? String
52
+ major, minor, update, patch, port_update = arg.split('.').collect do |v|
53
+ v.to_i
54
+ end
55
+ elsif arg >= 0x08000000
56
+ major = (arg & 0xFF000000) >> 24
57
+ minor = (arg & 0x00F00000) >> 20
58
+ update = (arg & 0x000FF000) >> 12
59
+ patch = (arg & 0x00000F00) >> 8
60
+ port_update = (arg & 0x000000FF)
61
+ else
62
+ major = arg
63
+ end
64
+ @major = major
65
+ @minor = minor || 0
66
+ @update = update || 0
67
+ @patch = patch || 0
68
+ @port_update = port_update || 0
69
+ end
70
+
71
+ # :call-seq:
72
+ # oraver <=> other_oraver -> -1, 0, +1
73
+ #
74
+ # Compares +oraver+ and +other_oraver+.
75
+ #
76
+ # <=> is the basis for the methods <, <=, ==, >, >=, and between?,
77
+ # included from module Comparable.
78
+ def <=>(other)
79
+ cmp = @major <=> other.major
80
+ return cmp if cmp != 0
81
+ cmp = @minor <=> other.minor
82
+ return cmp if cmp != 0
83
+ cmp = @update <=> other.update
84
+ return cmp if cmp != 0
85
+ cmp = @patch <=> other.patch
86
+ return cmp if cmp != 0
87
+ @port_update <=> other.port_update
88
+ end
89
+
90
+ # :call-seq:
91
+ # oraver.to_i -> integer
92
+ #
93
+ # Returns an integer number contains 5-digit Oracle version.
94
+ #
95
+ # If the hexadecimal notation is 0xAABCCDEE, *major*, *minor*,
96
+ # *update*, *patch* and *port_update* are 0xAA, 0xB, 0xCC, 0xD and
97
+ # 0xEE respectively.
98
+ #
99
+ # == Example
100
+ # oraver = OCI8::OracleVersion.new('10.2.0.4')
101
+ # oraver.to_i # => 169870336
102
+ # '%08x' % oraver.to_i # => "0a200400"
103
+ def to_i
104
+ (@major << 24) | (@minor << 20) | (@update << 12) | (@patch << 8) | @port_update
105
+ end
106
+
107
+ # :call-seq:
108
+ # oraver.to_s -> string
109
+ #
110
+ # Returns a dotted version string of the Oracle version.
111
+ #
112
+ # == Example
113
+ # oraver = OCI8::OracleVersion.new('10.2.0.4')
114
+ # oraver.to_s # => '10.2.0.4.0'
115
+ def to_s
116
+ format('%d.%d.%d.%d.%d', @major, @minor, @update, @patch, @port_update)
117
+ end
118
+
119
+ # :call-seq:
120
+ # oraver.eql? other -> true or false
121
+ #
122
+ # Returns true if +oraver+ and +other+ are the same type and have
123
+ # equal values.
124
+ #--
125
+ # This is for class Hash to test members for equality.
126
+ def eql?(other)
127
+ other.is_a? OCI8::OracleVersion and (self <=> other) == 0
128
+ end
129
+
130
+ # :call-seq:
131
+ # oraver.hash -> integer
132
+ #
133
+ # Returns a hash based on the value of +oraver+.
134
+ #--
135
+ # This is for class Hash.
136
+ def hash
137
+ to_i
138
+ end
139
+
140
+ def inspect # :nodoc:
141
+ "#<#{self.class.to_s}: #{self.to_s}>"
142
+ end
143
+ end
144
+ end