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,434 @@
1
+ require 'oci8'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/config'
4
+ require 'bigdecimal'
5
+ require 'rational'
6
+
7
+ class TestOCI8 < Test::Unit::TestCase
8
+
9
+ def setup
10
+ @conn = get_oci8_connection
11
+ end
12
+
13
+ def teardown
14
+ @conn.logoff
15
+ end
16
+
17
+ def test_rename
18
+ drop_table('test_table')
19
+ drop_table('test_rename_table')
20
+ sql = <<-EOS
21
+ CREATE TABLE test_rename_table
22
+ (C CHAR(10) NOT NULL)
23
+ EOS
24
+ @conn.exec(sql)
25
+ @conn.exec("RENAME test_rename_table TO test_table")
26
+ drop_table('test_rename_table')
27
+ end
28
+
29
+ # USE_DYNAMIC_FETCH doesn't work well...
30
+ # This test is disabled.
31
+ def _test_long_type
32
+ drop_table('test_table')
33
+ @conn.exec('CREATE TABLE test_table (id number(38), lng long)')
34
+ test_data1 = 'a' * 70000
35
+ test_data2 = 'b' * 3000
36
+ test_data3 = nil
37
+ test_data4 = 'c' * 70000
38
+ @conn.exec('insert into test_table values (:1, :2)', 1, test_data1)
39
+ @conn.exec('insert into test_table values (:1, :2)', 2, [test_data2, :long])
40
+ @conn.exec('insert into test_table values (:1, :2)', 3, [nil, :long])
41
+ @conn.exec('insert into test_table values (:1, :2)', 4, [test_data4, :long])
42
+
43
+ [8000, 65535, 65536, 80000].each do |read_len|
44
+ @conn.long_read_len = read_len
45
+ cursor = @conn.parse('SELECT lng from test_table order by id')
46
+ cursor.exec
47
+ assert_equal(test_data1, cursor.fetch[0])
48
+ assert_equal(test_data2, cursor.fetch[0])
49
+ assert_equal(test_data3, cursor.fetch[0])
50
+ assert_equal(test_data4, cursor.fetch[0])
51
+ cursor.close
52
+ end
53
+ drop_table('test_table')
54
+ end
55
+
56
+ def test_long_type
57
+ @conn.long_read_len = 80000
58
+ drop_table('test_table')
59
+ @conn.exec('CREATE TABLE test_table (id number(38), lng long)')
60
+ test_data1 = 'a' * 70000
61
+ test_data2 = 'b' * 3000
62
+ test_data3 = nil
63
+ test_data4 = 'c' * 70000
64
+ @conn.exec('insert into test_table values (:1, :2)', 1, test_data1)
65
+ @conn.exec('insert into test_table values (:1, :2)', 2, [test_data2, :long])
66
+ @conn.exec('insert into test_table values (:1, :2)', 3, [nil, :long])
67
+ @conn.exec('insert into test_table values (:1, :2)', 4, [test_data4, :long])
68
+
69
+ cursor = @conn.parse('SELECT lng from test_table order by id')
70
+ cursor.exec
71
+ assert_equal(test_data1, cursor.fetch[0])
72
+ assert_equal(test_data2, cursor.fetch[0])
73
+ assert_equal(test_data3, cursor.fetch[0])
74
+ assert_equal(test_data4, cursor.fetch[0])
75
+ cursor.close
76
+ drop_table('test_table')
77
+ end
78
+
79
+ def test_select
80
+ drop_table('test_table')
81
+ sql = <<-EOS
82
+ CREATE TABLE test_table
83
+ (C CHAR(10) NOT NULL,
84
+ V VARCHAR2(20),
85
+ N NUMBER(10, 2),
86
+ D1 DATE, D2 DATE, D3 DATE, D4 DATE,
87
+ INT NUMBER(30), BIGNUM NUMBER(30))
88
+ STORAGE (
89
+ INITIAL 4k
90
+ NEXT 4k
91
+ MINEXTENTS 1
92
+ MAXEXTENTS UNLIMITED
93
+ PCTINCREASE 0)
94
+ EOS
95
+ @conn.exec(sql)
96
+ cursor = @conn.parse("INSERT INTO test_table VALUES (:C, :V, :N, :D1, :D2, :D3, :D4, :INT, :BIGNUM)")
97
+ 1.upto(10) do |i|
98
+ if i == 1
99
+ dt = [nil, OraDate]
100
+ else
101
+ dt = OraDate.new(2000 + i, 8, 3, 23, 59, 59)
102
+ end
103
+ cursor.exec(format("%10d", i * 10), i.to_s, i, dt, dt, dt, dt, i * 11111111111, i * 10000000000)
104
+ end
105
+ cursor.close
106
+ cursor = @conn.parse("SELECT * FROM test_table ORDER BY c")
107
+ cursor.define(5, Time) # define 5th column as Time
108
+ cursor.define(6, Date) # define 6th column as Date
109
+ cursor.define(7, DateTime) # define 7th column as DateTime
110
+ cursor.define(8, Integer) # define 8th column as Integer
111
+ cursor.define(9, Bignum) # define 9th column as Bignum
112
+ cursor.exec
113
+ assert_equal(["C", "V", "N", "D1", "D2", "D3", "D4", "INT", "BIGNUM"], cursor.get_col_names)
114
+ 1.upto(10) do |i|
115
+ rv = cursor.fetch
116
+ assert_equal(format("%10d", i * 10), rv[0])
117
+ assert_equal(i.to_s, rv[1])
118
+ assert_equal(i, rv[2])
119
+ if i == 1
120
+ assert_nil(rv[3])
121
+ assert_nil(rv[4])
122
+ assert_nil(rv[5])
123
+ assert_nil(rv[6])
124
+ else
125
+ tm = Time.local(2000 + i, 8, 3, 23, 59, 59)
126
+ dt = Date.civil(2000 + i, 8, 3)
127
+ dttm = DateTime.civil(2000 + i, 8, 3, 23, 59, 59, Time.now.utc_offset.to_r/86400)
128
+ assert_equal(tm, rv[3])
129
+ assert_equal(tm, rv[4])
130
+ assert_equal(dt, rv[5])
131
+ assert_equal(dttm, rv[6])
132
+ end
133
+ assert_equal(i * 11111111111, rv[7])
134
+ assert_equal(i * 10000000000, rv[8])
135
+ end
136
+ assert_nil(cursor.fetch)
137
+
138
+ # fetch_hash with block
139
+ cursor.exec
140
+ i = 1
141
+ cursor.fetch_hash do |row|
142
+ assert_equal(format("%10d", i * 10), row['C'])
143
+ assert_equal(i.to_s, row['V'])
144
+ assert_equal(i, row['N'])
145
+ if i == 1
146
+ assert_nil(row['D1'])
147
+ assert_nil(row['D2'])
148
+ assert_nil(row['D3'])
149
+ assert_nil(row['D4'])
150
+ else
151
+ tm = Time.local(2000 + i, 8, 3, 23, 59, 59)
152
+ dt = Date.civil(2000 + i, 8, 3)
153
+ dttm = DateTime.civil(2000 + i, 8, 3, 23, 59, 59, Time.now.utc_offset.to_r/86400)
154
+ assert_equal(tm, row['D1'])
155
+ assert_equal(tm, row['D2'])
156
+ assert_equal(dt, row['D3'])
157
+ assert_equal(dttm, row['D4'])
158
+ end
159
+ assert_equal(i * 11111111111, row['INT'])
160
+ assert_equal(i * 10000000000, row['BIGNUM'])
161
+ i += 1
162
+ end
163
+ assert_equal(11, i)
164
+
165
+ cursor.close
166
+ drop_table('test_table')
167
+ end
168
+
169
+ def test_bind_cursor
170
+ # FIXME: check again after upgrading Oracle 9.2 to 9.2.0.4.
171
+ return if $oracle_version < OCI8::ORAVER_10_1
172
+
173
+ drop_table('test_table')
174
+ sql = <<-EOS
175
+ CREATE TABLE test_table
176
+ (C CHAR(10) NOT NULL,
177
+ V VARCHAR2(20),
178
+ N NUMBER(10, 2),
179
+ D1 DATE, D2 DATE, D3 DATE,
180
+ INT NUMBER(30), BIGNUM NUMBER(30))
181
+ STORAGE (
182
+ INITIAL 4k
183
+ NEXT 4k
184
+ MINEXTENTS 1
185
+ MAXEXTENTS UNLIMITED
186
+ PCTINCREASE 0)
187
+ EOS
188
+ @conn.exec(sql)
189
+ cursor = @conn.parse("INSERT INTO test_table VALUES (:C, :V, :N, :D1, :D2, :D3, :INT, :BIGNUM)")
190
+ 1.upto(10) do |i|
191
+ if i == 1
192
+ dt = [nil, OraDate]
193
+ else
194
+ dt = OraDate.new(2000 + i, 8, 3, 23, 59, 59)
195
+ end
196
+ cursor.exec(format("%10d", i * 10), i.to_s, i, dt, dt, dt, i, i)
197
+ end
198
+ cursor.close
199
+ plsql = @conn.parse("BEGIN OPEN :cursor FOR SELECT * FROM test_table ORDER BY c; END;")
200
+ plsql.bind_param(':cursor', nil, OCI8::Cursor)
201
+ plsql.exec
202
+ cursor = plsql[':cursor']
203
+ cursor.define(5, Time) # define 5th column as Time
204
+ cursor.define(6, Date) # define 6th column as Date
205
+ cursor.define(7, Integer) # define 7th column as Integer
206
+ cursor.define(8, Bignum) # define 8th column as Integer
207
+ assert_equal(["C", "V", "N", "D1", "D2", "D3", "INT", "BIGNUM"], cursor.get_col_names)
208
+ 1.upto(10) do |i|
209
+ rv = cursor.fetch
210
+ assert_equal(format("%10d", i * 10), rv[0])
211
+ assert_equal(i.to_s, rv[1])
212
+ assert_equal(i, rv[2])
213
+ if i == 1
214
+ assert_nil(rv[3])
215
+ assert_nil(rv[4])
216
+ assert_nil(rv[5])
217
+ else
218
+ dttm = DateTime.civil(2000 + i, 8, 3, 23, 59, 59, Time.now.utc_offset.to_r/86400)
219
+ tm = Time.local(2000 + i, 8, 3, 23, 59, 59)
220
+ dt = Date.civil(2000 + i, 8, 3)
221
+ assert_equal(tm, rv[3])
222
+ assert_equal(tm, rv[4])
223
+ assert_equal(dt, rv[5])
224
+ end
225
+ assert_equal(i, rv[6])
226
+ assert_equal(i, rv[7])
227
+ end
228
+ assert_nil(cursor.fetch)
229
+ cursor.close
230
+ drop_table('test_table')
231
+ end
232
+
233
+ def test_cursor_in_result_set
234
+ drop_table('test_table')
235
+ sql = <<-EOS
236
+ CREATE TABLE test_table (N NUMBER(10, 2))
237
+ STORAGE (
238
+ INITIAL 4k
239
+ NEXT 4k
240
+ MINEXTENTS 1
241
+ MAXEXTENTS UNLIMITED
242
+ PCTINCREASE 0)
243
+ EOS
244
+ @conn.exec(sql)
245
+ cursor = @conn.parse("INSERT INTO test_table VALUES (:1)")
246
+ 1.upto(10) do |i|
247
+ cursor.exec(i)
248
+ end
249
+ cursor.close
250
+ cursor = @conn.exec(<<EOS)
251
+ select a.n, cursor (select a.n + b.n
252
+ from test_table b
253
+ order by n)
254
+ from test_table a
255
+ order by n
256
+ EOS
257
+ 1.upto(10) do |i|
258
+ row = cursor.fetch
259
+ assert_equal(i, row[0])
260
+ cursor_in_result_set = row[1]
261
+ 1.upto(10) do |j|
262
+ row2 = cursor_in_result_set.fetch
263
+ assert_equal(i + j, row2[0])
264
+ end
265
+ assert_nil(cursor_in_result_set.fetch) # check end of row data
266
+ cursor_in_result_set.close
267
+ end
268
+ assert_nil(cursor.fetch) # check end of row data
269
+ drop_table('test_table')
270
+ end
271
+
272
+ def test_binary_float
273
+ return if $oracle_version < OCI8::ORAVER_10_1
274
+
275
+ # Oracle 10g or upper
276
+ cursor = @conn.parse("select CAST(:1 AS BINARY_FLOAT), CAST(:2 AS BINARY_DOUBLE) from dual")
277
+ bind_val = -1.0
278
+ cursor.bind_param(1, 10.0, :binary_double)
279
+ cursor.bind_param(2, nil, :binary_double)
280
+ while bind_val < 10.0
281
+ cursor[2] = bind_val
282
+ cursor.exec
283
+ rv = cursor.fetch
284
+ assert_equal(10.0, rv[0])
285
+ assert_equal(bind_val, rv[1])
286
+ bind_val += 1.234
287
+ end
288
+ [-1.0/0.0, # -Infinite
289
+ +1.0/0.0, # +Infinite
290
+ 0.0/0.0 # NaN
291
+ ].each do |num|
292
+ cursor[1] = num
293
+ cursor[2] = num
294
+ cursor.exec
295
+ rv = cursor.fetch
296
+ if num.nan?
297
+ assert(rv[0].nan?)
298
+ assert(rv[1].nan?)
299
+ else
300
+ assert_equal(num, rv[0])
301
+ assert_equal(num, rv[1])
302
+ end
303
+ end
304
+ cursor.close
305
+ end
306
+
307
+ def test_clob_nclob_and_blob
308
+ return if OCI8::oracle_client_version < OCI8::ORAVER_8_1
309
+
310
+ drop_table('test_table')
311
+ sql = <<-EOS
312
+ CREATE TABLE test_table (id number(5), C CLOB, NC NCLOB, B BLOB)
313
+ STORAGE (
314
+ INITIAL 100k
315
+ NEXT 100k
316
+ MINEXTENTS 1
317
+ MAXEXTENTS UNLIMITED
318
+ PCTINCREASE 0)
319
+ EOS
320
+ @conn.exec(sql)
321
+ cursor = @conn.parse("INSERT INTO test_table VALUES (:1, :2, :3, :4)")
322
+ 0.upto(9) do |i|
323
+ val = format('%d', i) * 4096
324
+ cursor.exec(i, OCI8::CLOB.new(@conn, val), OCI8::NCLOB.new(@conn, val), OCI8::BLOB.new(@conn, val))
325
+ end
326
+ cursor.close
327
+ cursor = @conn.exec("select * from test_table order by id")
328
+ 0.upto(9) do |i|
329
+ rv = cursor.fetch
330
+ val = format('%d', i) * 4096
331
+ assert_equal(i, rv[0])
332
+ assert_instance_of(OCI8::CLOB, rv[1])
333
+ assert_instance_of(OCI8::NCLOB, rv[2])
334
+ assert_instance_of(OCI8::BLOB, rv[3])
335
+ assert_equal(val, rv[1].read)
336
+ assert_equal(val.length, rv[2].size)
337
+ assert_equal(val, rv[2].read)
338
+ assert_equal(val, rv[3].read)
339
+ end
340
+ assert_nil(cursor.fetch)
341
+ cursor.close
342
+ drop_table('test_table')
343
+ end
344
+
345
+ def test_select_number
346
+ drop_table('test_table')
347
+ @conn.exec(<<EOS)
348
+ CREATE TABLE test_table (n NUMBER, n20 NUMBER(20), n14_2 NUMBER(14,2), n15_2 NUMBER(15,2), flt FLOAT)
349
+ STORAGE (
350
+ INITIAL 100k
351
+ NEXT 100k
352
+ MINEXTENTS 1
353
+ MAXEXTENTS UNLIMITED
354
+ PCTINCREASE 0)
355
+ EOS
356
+ @conn.exec(<<EOS)
357
+ INSERT INTO test_table values(12345678901234, 12345678901234567890, 123456789012.34, 1234567890123.45, 1234.5)
358
+ EOS
359
+ @conn.exec("select * from test_table") do |row|
360
+ assert_equal(row[0], 12345678901234)
361
+ assert_equal(row[1], 12345678901234567890)
362
+ assert_equal(row[2], 123456789012.34)
363
+ assert_equal(row[3], BigDecimal("1234567890123.45"))
364
+ assert_equal(row[4], 1234.5)
365
+ assert_instance_of(BigDecimal, row[0])
366
+ assert_instance_of(Bignum, row[1])
367
+ assert_instance_of(Float, row[2])
368
+ assert_instance_of(BigDecimal, row[3])
369
+ assert_instance_of(Float, row[4])
370
+ end
371
+ drop_table('test_table')
372
+ end
373
+
374
+ def test_bind_number_with_implicit_conversions
375
+ src = [1, 1.2, BigDecimal("1.2"), Rational(12, 10)]
376
+ int = [1, 1, 1, 1]
377
+ flt = [1, 1.2, 1.2, 1.2]
378
+ dec = [BigDecimal("1"), BigDecimal("1.2"), BigDecimal("1.2"), BigDecimal("1.2")]
379
+ rat = [Rational(1), Rational(12, 10), Rational(12, 10), Rational(12, 10)]
380
+
381
+ cursor = @conn.parse("begin :1 := :2; end;")
382
+
383
+ # Float
384
+ cursor.bind_param(1, nil, Float)
385
+ cursor.bind_param(2, nil, Float)
386
+ src.each_with_index do |s, idx|
387
+ cursor[2] = s
388
+ cursor.exec
389
+ assert_equal(cursor[1], flt[idx])
390
+ assert_kind_of(Float, cursor[1])
391
+ end
392
+
393
+ # Fixnum
394
+ cursor.bind_param(1, nil, Fixnum)
395
+ cursor.bind_param(2, nil, Fixnum)
396
+ src.each_with_index do |s, idx|
397
+ cursor[2] = s
398
+ cursor.exec
399
+ assert_equal(cursor[1], int[idx])
400
+ assert_kind_of(Fixnum, cursor[1])
401
+ end
402
+
403
+ # Integer
404
+ cursor.bind_param(1, nil, Integer)
405
+ cursor.bind_param(2, nil, Integer)
406
+ src.each_with_index do |s, idx|
407
+ cursor[2] = s
408
+ cursor.exec
409
+ assert_equal(cursor[1], int[idx])
410
+ assert_kind_of(Integer, cursor[1])
411
+ end
412
+
413
+ # BigDecimal
414
+ cursor.bind_param(1, nil, BigDecimal)
415
+ cursor.bind_param(2, nil, BigDecimal)
416
+ src.each_with_index do |s, idx|
417
+ cursor[2] = s
418
+ cursor.exec
419
+ assert_equal(cursor[1], dec[idx])
420
+ assert_kind_of(BigDecimal, cursor[1])
421
+ end
422
+
423
+ # Rational
424
+ cursor.bind_param(1, nil, Rational)
425
+ cursor.bind_param(2, nil, Rational)
426
+ src.each_with_index do |s, idx|
427
+ cursor[2] = s
428
+ cursor.exec
429
+ assert_equal(cursor[1], rat[idx])
430
+ assert_kind_of(Rational, cursor[1])
431
+ end
432
+ end
433
+
434
+ end # TestOCI8
@@ -0,0 +1,70 @@
1
+ require 'oci8'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/config'
4
+
5
+ class TestOracleVersion < Test::Unit::TestCase
6
+
7
+ def test_init
8
+ oraver = OCI8::OracleVersion.new('8.1.6.2.3')
9
+ assert_equal(8, oraver.major)
10
+ assert_equal(1, oraver.minor)
11
+ assert_equal(6, oraver.update)
12
+ assert_equal(2, oraver.patch)
13
+ assert_equal(3, oraver.port_update)
14
+
15
+ oraver = OCI8::OracleVersion.new('8.1.6')
16
+ assert_equal(8, oraver.major)
17
+ assert_equal(1, oraver.minor)
18
+ assert_equal(6, oraver.update)
19
+ assert_equal(0, oraver.patch)
20
+ assert_equal(0, oraver.port_update)
21
+
22
+ oraver = OCI8::OracleVersion.new('10')
23
+ assert_equal(10, oraver.major)
24
+ assert_equal(0, oraver.minor)
25
+ assert_equal(0, oraver.update)
26
+ assert_equal(0, oraver.patch)
27
+ assert_equal(0, oraver.port_update)
28
+
29
+ oraver = OCI8::OracleVersion.new(0x08106203)
30
+ assert_equal(8, oraver.major)
31
+ assert_equal(1, oraver.minor)
32
+ assert_equal(6, oraver.update)
33
+ assert_equal(2, oraver.patch)
34
+ assert_equal(3, oraver.port_update)
35
+ end
36
+
37
+ def test_compare
38
+ oraver = OCI8::OracleVersion.new('8.1.6.2.3')
39
+ assert_operator(oraver, :==, OCI8::OracleVersion.new('8.1.6.2.3'))
40
+ assert_operator(oraver, :<, OCI8::OracleVersion.new('9.1.6.2.3'))
41
+ assert_operator(oraver, :<, OCI8::OracleVersion.new('8.2.6.2.3'))
42
+ assert_operator(oraver, :<, OCI8::OracleVersion.new('8.1.7.2.3'))
43
+ assert_operator(oraver, :<, OCI8::OracleVersion.new('8.1.6.3.3'))
44
+ assert_operator(oraver, :<, OCI8::OracleVersion.new('8.1.6.2.4'))
45
+ assert_operator(oraver, :>, OCI8::OracleVersion.new('7.1.6.2.3'))
46
+ assert_operator(oraver, :>, OCI8::OracleVersion.new('8.0.6.2.3'))
47
+ assert_operator(oraver, :>, OCI8::OracleVersion.new('8.1.5.2.3'))
48
+ assert_operator(oraver, :>, OCI8::OracleVersion.new('8.1.6.1.3'))
49
+ assert_operator(oraver, :>, OCI8::OracleVersion.new('8.1.6.2.2'))
50
+ end
51
+
52
+ def test_to_s
53
+ oraver = OCI8::OracleVersion.new('8.1.6.2.3')
54
+ assert_equal('8.1.6.2.3', oraver.to_s)
55
+ end
56
+
57
+ def test_to_i
58
+ oraver = OCI8::OracleVersion.new('8.1.6.2.3')
59
+ assert_equal(0x08106203, oraver.to_i)
60
+ end
61
+
62
+ def test_eql
63
+ oraver = OCI8::OracleVersion.new('8.1.6.2.3')
64
+ assert_equal(true, oraver.eql?(OCI8::OracleVersion.new('8.1.6.2.3')))
65
+ assert_equal(false, oraver.eql?(OCI8::OracleVersion.new('8.2.6.2.3')))
66
+ assert_equal(false, oraver.eql?('8.1.6.2.3'))
67
+ end
68
+ end
69
+
70
+ Test::Unit::AutoRunner.run() if $0 == __FILE__