ruby-oci8 2.1.5.1-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +17 -0
  3. data/COPYING +30 -0
  4. data/COPYING_old +64 -0
  5. data/ChangeLog +2779 -0
  6. data/Makefile +92 -0
  7. data/NEWS +660 -0
  8. data/README.md +43 -0
  9. data/VERSION +1 -0
  10. data/dist-files +91 -0
  11. data/docs/install-binary-package.md +40 -0
  12. data/docs/install-full-client.md +116 -0
  13. data/docs/install-instant-client.md +167 -0
  14. data/docs/platform-specific-issues.md +197 -0
  15. data/docs/report-installation-issue.md +50 -0
  16. data/lib/.document +1 -0
  17. data/lib/dbd/OCI8.rb +591 -0
  18. data/lib/oci8.rb +147 -0
  19. data/lib/oci8.rb.in +147 -0
  20. data/lib/oci8/.document +8 -0
  21. data/lib/oci8/bindtype.rb +350 -0
  22. data/lib/oci8/compat.rb +113 -0
  23. data/lib/oci8/connection_pool.rb +108 -0
  24. data/lib/oci8/cursor.rb +564 -0
  25. data/lib/oci8/datetime.rb +605 -0
  26. data/lib/oci8/encoding-init.rb +79 -0
  27. data/lib/oci8/encoding.yml +537 -0
  28. data/lib/oci8/metadata.rb +2092 -0
  29. data/lib/oci8/object.rb +605 -0
  30. data/lib/oci8/oci8.rb +560 -0
  31. data/lib/oci8/ocihandle.rb +607 -0
  32. data/lib/oci8/oracle_version.rb +143 -0
  33. data/lib/oci8/properties.rb +134 -0
  34. data/lib/oci8lib_200.so +0 -0
  35. data/metaconfig +142 -0
  36. data/pre-distclean.rb +7 -0
  37. data/ruby-oci8.gemspec +80 -0
  38. data/setup.rb +1333 -0
  39. data/test/README +42 -0
  40. data/test/config.rb +184 -0
  41. data/test/setup_test_object.sql +171 -0
  42. data/test/test_all.rb +54 -0
  43. data/test/test_appinfo.rb +63 -0
  44. data/test/test_array_dml.rb +333 -0
  45. data/test/test_bind_raw.rb +46 -0
  46. data/test/test_bind_string.rb +106 -0
  47. data/test/test_bind_time.rb +178 -0
  48. data/test/test_break.rb +124 -0
  49. data/test/test_clob.rb +98 -0
  50. data/test/test_connection_pool.rb +125 -0
  51. data/test/test_connstr.rb +81 -0
  52. data/test/test_datetime.rb +581 -0
  53. data/test/test_dbi.rb +366 -0
  54. data/test/test_dbi_clob.rb +53 -0
  55. data/test/test_encoding.rb +104 -0
  56. data/test/test_error.rb +88 -0
  57. data/test/test_metadata.rb +1485 -0
  58. data/test/test_object.rb +462 -0
  59. data/test/test_oci8.rb +489 -0
  60. data/test/test_oracle_version.rb +70 -0
  61. data/test/test_oradate.rb +256 -0
  62. data/test/test_oranumber.rb +787 -0
  63. data/test/test_rowid.rb +33 -0
  64. metadata +109 -0
data/test/test_oci8.rb ADDED
@@ -0,0 +1,489 @@
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, i % 2 == 0 ? 7 : 1, 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
+ month = i % 2 == 0 ? 7 : 1
126
+ tm = Time.local(2000 + i, month, 3, 23, 59, 59)
127
+ dt = Date.civil(2000 + i, month, 3)
128
+ dttm = DateTime.civil(2000 + i, month, 3, 23, 59, 59, tm.utc_offset.to_r/86400)
129
+ assert_equal(tm, rv[3])
130
+ assert_equal(tm, rv[4])
131
+ assert_equal(dt, rv[5])
132
+ assert_equal(dttm, rv[6])
133
+ end
134
+ assert_equal(i * 11111111111, rv[7])
135
+ assert_equal(i * 10000000000, rv[8])
136
+ end
137
+ assert_nil(cursor.fetch)
138
+
139
+ # fetch_hash with block
140
+ cursor.exec
141
+ i = 1
142
+ cursor.fetch_hash do |row|
143
+ assert_equal(format("%10d", i * 10), row['C'])
144
+ assert_equal(i.to_s, row['V'])
145
+ assert_equal(i, row['N'])
146
+ if i == 1
147
+ assert_nil(row['D1'])
148
+ assert_nil(row['D2'])
149
+ assert_nil(row['D3'])
150
+ assert_nil(row['D4'])
151
+ else
152
+ month = i % 2 == 0 ? 7 : 1
153
+ tm = Time.local(2000 + i, month, 3, 23, 59, 59)
154
+ dt = Date.civil(2000 + i, month, 3)
155
+ dttm = DateTime.civil(2000 + i, month, 3, 23, 59, 59, tm.utc_offset.to_r/86400)
156
+ assert_equal(tm, row['D1'])
157
+ assert_equal(tm, row['D2'])
158
+ assert_equal(dt, row['D3'])
159
+ assert_equal(dttm, row['D4'])
160
+ end
161
+ assert_equal(i * 11111111111, row['INT'])
162
+ assert_equal(i * 10000000000, row['BIGNUM'])
163
+ i += 1
164
+ end
165
+ assert_equal(11, i)
166
+
167
+ cursor.close
168
+ drop_table('test_table')
169
+ end
170
+
171
+ def test_bind_cursor
172
+ # FIXME: check again after upgrading Oracle 9.2 to 9.2.0.4.
173
+ return if $oracle_version < OCI8::ORAVER_10_1
174
+
175
+ drop_table('test_table')
176
+ sql = <<-EOS
177
+ CREATE TABLE test_table
178
+ (C CHAR(10) NOT NULL,
179
+ V VARCHAR2(20),
180
+ N NUMBER(10, 2),
181
+ D1 DATE, D2 DATE, D3 DATE,
182
+ INT NUMBER(30), BIGNUM NUMBER(30))
183
+ STORAGE (
184
+ INITIAL 4k
185
+ NEXT 4k
186
+ MINEXTENTS 1
187
+ MAXEXTENTS UNLIMITED
188
+ PCTINCREASE 0)
189
+ EOS
190
+ @conn.exec(sql)
191
+ cursor = @conn.parse("INSERT INTO test_table VALUES (:C, :V, :N, :D1, :D2, :D3, :INT, :BIGNUM)")
192
+ 1.upto(10) do |i|
193
+ if i == 1
194
+ dt = [nil, OraDate]
195
+ else
196
+ dt = OraDate.new(2000 + i, 8, 3, 23, 59, 59)
197
+ end
198
+ cursor.exec(format("%10d", i * 10), i.to_s, i, dt, dt, dt, i, i)
199
+ end
200
+ cursor.close
201
+ plsql = @conn.parse("BEGIN OPEN :cursor FOR SELECT * FROM test_table ORDER BY c; END;")
202
+ plsql.bind_param(':cursor', nil, OCI8::Cursor)
203
+ plsql.exec
204
+ cursor = plsql[':cursor']
205
+ cursor.define(5, DateTime) # define 5th column as DateTime
206
+ cursor.define(6, Date) # define 6th column as Date
207
+ cursor.define(7, Integer) # define 7th column as Integer
208
+ cursor.define(8, Bignum) # define 8th column as Integer
209
+ assert_equal(["C", "V", "N", "D1", "D2", "D3", "INT", "BIGNUM"], cursor.get_col_names)
210
+ 1.upto(10) do |i|
211
+ rv = cursor.fetch
212
+ assert_equal(format("%10d", i * 10), rv[0])
213
+ assert_equal(i.to_s, rv[1])
214
+ assert_equal(i, rv[2])
215
+ if i == 1
216
+ assert_nil(rv[3])
217
+ assert_nil(rv[4])
218
+ assert_nil(rv[5])
219
+ else
220
+ dttm = DateTime.civil(2000 + i, 8, 3, 23, 59, 59, Time.now.utc_offset.to_r/86400)
221
+ tm = Time.local(2000 + i, 8, 3, 23, 59, 59)
222
+ dt = Date.civil(2000 + i, 8, 3)
223
+ assert_equal(tm, rv[3])
224
+ assert_equal(dttm, rv[4])
225
+ assert_equal(dt, rv[5])
226
+ end
227
+ assert_equal(i, rv[6])
228
+ assert_equal(i, rv[7])
229
+ end
230
+ assert_nil(cursor.fetch)
231
+ cursor.close
232
+ drop_table('test_table')
233
+ end
234
+
235
+ def test_cursor_in_result_set
236
+ drop_table('test_table')
237
+ sql = <<-EOS
238
+ CREATE TABLE test_table (N NUMBER(10, 2))
239
+ STORAGE (
240
+ INITIAL 4k
241
+ NEXT 4k
242
+ MINEXTENTS 1
243
+ MAXEXTENTS UNLIMITED
244
+ PCTINCREASE 0)
245
+ EOS
246
+ @conn.exec(sql)
247
+ cursor = @conn.parse("INSERT INTO test_table VALUES (:1)")
248
+ 1.upto(10) do |i|
249
+ cursor.exec(i)
250
+ end
251
+ cursor.close
252
+ cursor = @conn.exec(<<EOS)
253
+ select a.n, cursor (select a.n + b.n
254
+ from test_table b
255
+ order by n)
256
+ from test_table a
257
+ order by n
258
+ EOS
259
+ 1.upto(10) do |i|
260
+ row = cursor.fetch
261
+ assert_equal(i, row[0])
262
+ cursor_in_result_set = row[1]
263
+ 1.upto(10) do |j|
264
+ row2 = cursor_in_result_set.fetch
265
+ assert_equal(i + j, row2[0])
266
+ end
267
+ assert_nil(cursor_in_result_set.fetch) # check end of row data
268
+ cursor_in_result_set.close
269
+ end
270
+ assert_nil(cursor.fetch) # check end of row data
271
+ drop_table('test_table')
272
+ end
273
+
274
+ def test_binary_float
275
+ return if $oracle_version < OCI8::ORAVER_10_1
276
+
277
+ # Oracle 10g or upper
278
+ cursor = @conn.parse("select CAST(:1 AS BINARY_FLOAT), CAST(:2 AS BINARY_DOUBLE) from dual")
279
+ bind_val = -1.0
280
+ cursor.bind_param(1, 10.0, :binary_double)
281
+ cursor.bind_param(2, nil, :binary_double)
282
+ while bind_val < 10.0
283
+ cursor[2] = bind_val
284
+ cursor.exec
285
+ rv = cursor.fetch
286
+ assert_equal(10.0, rv[0])
287
+ assert_equal(bind_val, rv[1])
288
+ bind_val += 1.234
289
+ end
290
+ [-1.0/0.0, # -Infinite
291
+ +1.0/0.0, # +Infinite
292
+ 0.0/0.0 # NaN
293
+ ].each do |num|
294
+ cursor[1] = num
295
+ cursor[2] = num
296
+ cursor.exec
297
+ rv = cursor.fetch
298
+ if num.nan?
299
+ assert(rv[0].nan?)
300
+ assert(rv[1].nan?)
301
+ else
302
+ assert_equal(num, rv[0])
303
+ assert_equal(num, rv[1])
304
+ end
305
+ end
306
+ cursor.close
307
+ end
308
+
309
+ def test_clob_nclob_and_blob
310
+ return if OCI8::oracle_client_version < OCI8::ORAVER_8_1
311
+
312
+ drop_table('test_table')
313
+ sql = <<-EOS
314
+ CREATE TABLE test_table (id number(5), C CLOB, NC NCLOB, B BLOB)
315
+ STORAGE (
316
+ INITIAL 100k
317
+ NEXT 100k
318
+ MINEXTENTS 1
319
+ MAXEXTENTS UNLIMITED
320
+ PCTINCREASE 0)
321
+ EOS
322
+ @conn.exec(sql)
323
+ cursor = @conn.parse("INSERT INTO test_table VALUES (:1, :2, :3, :4)")
324
+ 0.upto(9) do |i|
325
+ val = case i
326
+ when 5; '' # empty string
327
+ else format('%d', i) * 4096
328
+ end
329
+ cursor.exec(i, OCI8::CLOB.new(@conn, val), OCI8::NCLOB.new(@conn, val), OCI8::BLOB.new(@conn, val))
330
+ end
331
+ cursor.close
332
+ cursor = @conn.exec("select * from test_table order by id")
333
+ 0.upto(9) do |i|
334
+ rv = cursor.fetch
335
+ val = case i
336
+ when 5; '' # empty string
337
+ else format('%d', i) * 4096
338
+ end
339
+ assert_equal(i, rv[0])
340
+ assert_instance_of(OCI8::CLOB, rv[1])
341
+ assert_instance_of(OCI8::NCLOB, rv[2])
342
+ assert_instance_of(OCI8::BLOB, rv[3])
343
+ assert_equal(val, rv[1].read)
344
+ assert_equal(val.length, rv[2].size)
345
+ assert_equal(val, rv[2].read)
346
+ assert_equal(val, rv[3].read)
347
+ end
348
+ assert_nil(cursor.fetch)
349
+ cursor.close
350
+ drop_table('test_table')
351
+ end
352
+
353
+ def test_select_number
354
+ drop_table('test_table')
355
+ @conn.exec(<<EOS)
356
+ CREATE TABLE test_table (n NUMBER, n20 NUMBER(20), n14_2 NUMBER(14,2), n15_2 NUMBER(15,2), flt FLOAT)
357
+ STORAGE (
358
+ INITIAL 100k
359
+ NEXT 100k
360
+ MINEXTENTS 1
361
+ MAXEXTENTS UNLIMITED
362
+ PCTINCREASE 0)
363
+ EOS
364
+ @conn.exec(<<EOS)
365
+ INSERT INTO test_table values(12345678901234, 12345678901234567890, 123456789012.34, 1234567890123.45, 1234.5)
366
+ EOS
367
+ @conn.exec("select * from test_table") do |row|
368
+ assert_equal(row[0], 12345678901234)
369
+ assert_equal(row[1], 12345678901234567890)
370
+ assert_equal(row[2], 123456789012.34)
371
+ assert_equal(row[3], BigDecimal("1234567890123.45"))
372
+ assert_equal(row[4], 1234.5)
373
+ assert_instance_of(BigDecimal, row[0])
374
+ assert_instance_of(Bignum, row[1])
375
+ assert_instance_of(Float, row[2])
376
+ assert_instance_of(BigDecimal, row[3])
377
+ assert_instance_of(Float, row[4])
378
+ end
379
+ drop_table('test_table')
380
+ end
381
+
382
+ def test_bind_number_with_implicit_conversions
383
+ src = [1, 1.2, BigDecimal("1.2"), Rational(12, 10)]
384
+ int = [1, 1, 1, 1]
385
+ flt = [1, 1.2, 1.2, 1.2]
386
+ dec = [BigDecimal("1"), BigDecimal("1.2"), BigDecimal("1.2"), BigDecimal("1.2")]
387
+ rat = [Rational(1), Rational(12, 10), Rational(12, 10), Rational(12, 10)]
388
+
389
+ cursor = @conn.parse("begin :1 := :2; end;")
390
+
391
+ # Float
392
+ cursor.bind_param(1, nil, Float)
393
+ cursor.bind_param(2, nil, Float)
394
+ src.each_with_index do |s, idx|
395
+ cursor[2] = s
396
+ cursor.exec
397
+ assert_equal(cursor[1], flt[idx])
398
+ assert_kind_of(Float, cursor[1])
399
+ end
400
+
401
+ # Fixnum
402
+ cursor.bind_param(1, nil, Fixnum)
403
+ cursor.bind_param(2, nil, Fixnum)
404
+ src.each_with_index do |s, idx|
405
+ cursor[2] = s
406
+ cursor.exec
407
+ assert_equal(cursor[1], int[idx])
408
+ assert_kind_of(Fixnum, cursor[1])
409
+ end
410
+
411
+ # Integer
412
+ cursor.bind_param(1, nil, Integer)
413
+ cursor.bind_param(2, nil, Integer)
414
+ src.each_with_index do |s, idx|
415
+ cursor[2] = s
416
+ cursor.exec
417
+ assert_equal(cursor[1], int[idx])
418
+ assert_kind_of(Integer, cursor[1])
419
+ end
420
+
421
+ # BigDecimal
422
+ cursor.bind_param(1, nil, BigDecimal)
423
+ cursor.bind_param(2, nil, BigDecimal)
424
+ src.each_with_index do |s, idx|
425
+ cursor[2] = s
426
+ cursor.exec
427
+ assert_equal(cursor[1], dec[idx])
428
+ assert_kind_of(BigDecimal, cursor[1])
429
+ end
430
+
431
+ # Rational
432
+ cursor.bind_param(1, nil, Rational)
433
+ cursor.bind_param(2, nil, Rational)
434
+ src.each_with_index do |s, idx|
435
+ cursor[2] = s
436
+ cursor.exec
437
+ assert_equal(cursor[1], rat[idx])
438
+ assert_kind_of(Rational, cursor[1])
439
+ end
440
+ end
441
+
442
+ def test_parse_sets_query_on_cursor
443
+ statement = "select * from country where country_code = 'ja'"
444
+ cursor = @conn.parse(statement)
445
+ assert_equal(statement, cursor.statement)
446
+ end
447
+
448
+ def test_last_error
449
+ # OCI8#parse and OCI8#exec reset OCI8#last_error
450
+ @conn.last_error = 'dummy'
451
+ @conn.exec('begin null; end;')
452
+ assert_nil(@conn.last_error)
453
+ @conn.last_error = 'dummy'
454
+ cursor = @conn.parse('select col1, max(col2) from (select 1 as col1, null as col2 from dual) group by col1')
455
+ assert_nil(@conn.last_error)
456
+
457
+ # When an OCI function returns OCI_SUCCESS_WITH_INFO, OCI8#last_error is set.
458
+ @conn.last_error = 'dummy'
459
+ cursor.exec
460
+ assert_equal('dummy', @conn.last_error)
461
+ cursor.fetch
462
+ assert_kind_of(OCISuccessWithInfo, @conn.last_error)
463
+ assert_equal(24347, @conn.last_error.code)
464
+ end
465
+
466
+ def test_environment_handle
467
+ # OCI_ATTR_HEAPALLOC
468
+ assert_operator(OCI8.send(:class_variable_get, :@@environment_handle).send(:attr_get_ub4, 30), :>, 0)
469
+ # OCI_ATTR_OBJECT
470
+ assert(OCI8.send(:class_variable_get, :@@environment_handle).send(:attr_get_boolean, 2))
471
+ # OCI_ATTR_SHARED_HEAPALLOC
472
+ assert_equal(0, OCI8.send(:class_variable_get, :@@environment_handle).send(:attr_get_ub4, 84))
473
+ end
474
+
475
+ def test_process_handle
476
+ # OCI_ATTR_MEMPOOL_APPNAME
477
+ assert_equal('', OCI8.send(:class_variable_get, :@@process_handle).send(:attr_get_string, 90))
478
+ # OCI_ATTR_MEMPOOL_SIZE
479
+ assert_equal(0, OCI8.send(:class_variable_get, :@@process_handle).send(:attr_get_ub4, 88))
480
+ end
481
+
482
+ def test_client_driver_name
483
+ if OCI8.oracle_client_version >= OCI8::ORAVER_11_1 and @conn.oracle_server_version >= OCI8::ORAVER_11_1
484
+ sid = @conn.select_one("select userenv('sid') from dual")[0].to_i
485
+ driver_name = @conn.select_one('select client_driver from v$session_connect_info where sid = :1', sid)[0]
486
+ assert_equal('rubyoci8', driver_name)
487
+ end
488
+ end
489
+ end # TestOCI8