ruby-oci8 2.1.5.1-x64-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.
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
@@ -0,0 +1,462 @@
1
+ require 'oci8'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/config'
4
+
5
+ conn = OCI8.new($dbuser, $dbpass, $dbname)
6
+ error_message = nil
7
+ begin
8
+ conn.describe_type('rb_test_int_array')
9
+ conn.describe_type('rb_test_flt_array')
10
+ conn.describe_type('rb_test_num_array')
11
+ conn.describe_type('rb_test_bdbl_array')
12
+ conn.describe_type('rb_test_bflt_array')
13
+ conn.describe_type('rb_test_str_array')
14
+ conn.describe_type('rb_test_raw_array')
15
+ conn.describe_type('rb_test_obj_elem_array')
16
+ conn.describe_type('rb_test_obj_elem_ary_of_ary')
17
+ conn.describe_type('rb_test_obj')
18
+ conn.describe_table('rb_test_obj_tab1')
19
+ conn.describe_table('rb_test_obj_tab2')
20
+
21
+ class RbTestObj < OCI8::Object::Base
22
+ end
23
+
24
+ begin
25
+ version = RbTestObj.test_object_version(conn)
26
+ error_message = "Invalid test object version" if version != 2
27
+ rescue NoMethodError
28
+ raise unless $!.to_s.include?('test_object_version')
29
+ error_message = "rb_test_obj.test_object_version is not declared."
30
+ end
31
+ rescue OCIError
32
+ raise if $!.code != 4043
33
+ error_message = $!.to_s
34
+ ensure
35
+ conn.logoff
36
+ end
37
+
38
+ raise <<EOS if error_message
39
+
40
+ #{error_message}
41
+ You need to execute SQL statements in #{File.dirname(__FILE__)}/setup_test_object.sql as follows:
42
+
43
+ $ sqlplus USERNAME/PASSWORD
44
+ SQL> @test/setup_test_object.sql
45
+
46
+ EOS
47
+
48
+
49
+ class RbTestIntArray < OCI8::Object::Base
50
+ end
51
+
52
+ class TestObj1 < Test::Unit::TestCase
53
+ Delta = 0.00001
54
+
55
+ def setup
56
+ @conn = get_oci8_connection
57
+ RbTestObj.default_connection = @conn
58
+ end
59
+
60
+ def teardown
61
+ @conn.logoff
62
+ end
63
+
64
+ class ExpectedValObjElem
65
+ def initialize(x, y)
66
+ @attributes = {:x => x, :y => y}
67
+ end
68
+ def ==(val)
69
+ @attributes[:x] == val.x and @attributes[:y] == val.y
70
+ end
71
+ end
72
+
73
+ class ExpectedVal
74
+ include Test::Unit::Assertions
75
+
76
+ attr_reader :n
77
+ attr_reader :int_val
78
+ attr_reader :flt_val
79
+ attr_reader :num_val
80
+ attr_reader :bdbl_val
81
+ attr_reader :bflt_val
82
+ attr_reader :str_val
83
+ attr_reader :raw_val
84
+ attr_reader :clob_val
85
+ attr_reader :nclob_val
86
+ attr_reader :blob_val
87
+ attr_reader :obj_val
88
+ attr_reader :int_array_val
89
+ attr_reader :flt_array_val
90
+ attr_reader :num_array_val
91
+ attr_reader :bdbl_array_val
92
+ attr_reader :bflt_array_val
93
+ attr_reader :str_array_val
94
+ attr_reader :raw_array_val
95
+ attr_reader :obj_array_val
96
+ attr_reader :obj_ary_of_ary_val
97
+ attr_reader :date_val
98
+ # attr_reader :date_array_val
99
+
100
+ def initialize
101
+ @n = 0.0
102
+ end
103
+
104
+ def to_test_date(n)
105
+ year = (1990 + n).round
106
+ month = (n.round * 5) % 12 + 1
107
+ mday = (n.round * 7) % 27 + 1
108
+ hour = (n.round * 9) % 24
109
+ minute = (n.round * 11) % 60
110
+ sec = (n.round * 13) % 60
111
+ convert_to_time(year, month, mday, hour, minute, sec, 0, nil)
112
+ end
113
+ private :to_test_date
114
+
115
+ def next
116
+ @n += 1.2
117
+ @n = (@n * 10).round / 10.0
118
+ @int_val = @n.round
119
+ @flt_val = @n
120
+ @num_val = @n
121
+ @bdbl_val = @n
122
+ @bflt_val = @n
123
+ @str_val = @n.to_s
124
+ @str_val = $` if /.0$/ =~ @str_val
125
+ @raw_val = @str_val
126
+ @clob_val = @str_val
127
+ @nclob_val = @str_val
128
+ @blob_val = @str_val
129
+ @obj_val = ExpectedValObjElem.new(@int_val, @int_val + 1)
130
+ @date_val = to_test_date(@n)
131
+ if @int_val == 1
132
+ @int_array_val = nil
133
+ @flt_array_val = nil
134
+ @num_array_val = nil
135
+ @bdbl_array_val = nil
136
+ @bflt_array_val = nil
137
+ @str_array_val = nil
138
+ @raw_array_val = nil
139
+ @obj_array_val = nil
140
+ @obj_ary_of_ary_val = nil
141
+ # @date_array_val = nil
142
+ else
143
+ @int_array_val = []
144
+ @flt_array_val = []
145
+ @num_array_val = []
146
+ @bdbl_array_val = []
147
+ @bflt_array_val = []
148
+ @str_array_val = []
149
+ @raw_array_val = []
150
+ @obj_array_val = []
151
+ @obj_ary_of_ary_val = []
152
+ # @date_array_val = []
153
+ 0.upto(2) do |i|
154
+ val = (@n + i).to_s
155
+ val = $` if /.0$/ =~ val
156
+ @int_array_val[i] = @int_val + i
157
+ @flt_array_val[i] = @n + i
158
+ @num_array_val[i] = @n + i
159
+ @bdbl_array_val[i] = @n + i
160
+ @bflt_array_val[i] = @n + i
161
+ @str_array_val[i] = val
162
+ @raw_array_val[i] = val
163
+ @obj_array_val[i] = ExpectedValObjElem.new(@int_val + i, @int_val + i + 1)
164
+ # @date_array_val[i] = to_test_date(@n + i)
165
+ end
166
+ @obj_ary_of_ary_val[0] = @obj_array_val
167
+ end
168
+ @n <= 20
169
+ end
170
+
171
+ def should_be_equal(val)
172
+ if val.is_a? Array
173
+ int_val = val[0]
174
+ flt_val = val[1]
175
+ num_val = val[2]
176
+ bdbl_val = val[3]
177
+ bflt_val = val[4]
178
+ str_val = val[5]
179
+ raw_val = val[6]
180
+ clob_val = val[7] && val[7].read
181
+ nclob_val = val[8] && val[8].read
182
+ blob_val = val[9] && val[9].read
183
+ obj_val = val[10]
184
+ int_array_val = val[11]
185
+ flt_array_val = val[12]
186
+ num_array_val = val[13]
187
+ bdbl_array_val = val[14]
188
+ bflt_array_val = val[15]
189
+ str_array_val = val[16]
190
+ raw_array_val = val[17]
191
+ obj_array_val = val[18]
192
+ obj_ary_of_ary_val = val[19]
193
+ date_val = val[20]
194
+ # date_array_val = val[18]
195
+ else
196
+ assert_instance_of(RbTestObj, val)
197
+ int_val = val.int_val
198
+ flt_val = val.flt_val
199
+ num_val = val.num_val
200
+ bdbl_val = val.bdbl_val
201
+ bflt_val = val.bflt_val
202
+ str_val = val.str_val
203
+ raw_val = val.raw_val
204
+ clob_val = val.clob_val && val.clob_val.read
205
+ nclob_val = val.nclob_val && val.nclob_val.read
206
+ blob_val = val.blob_val && val.blob_val.read
207
+ obj_val = val.obj_val
208
+ int_array_val = val.int_array_val
209
+ flt_array_val = val.flt_array_val
210
+ num_array_val = val.num_array_val
211
+ bdbl_array_val = val.bdbl_array_val
212
+ bflt_array_val = val.bflt_array_val
213
+ str_array_val = val.str_array_val
214
+ raw_array_val = val.raw_array_val
215
+ obj_array_val = val.obj_array_val
216
+ obj_ary_of_ary_val = val.obj_ary_of_ary_val
217
+ date_val = val.date_val
218
+ # date_array_val = val.date_array_val
219
+ end
220
+
221
+ assert_equal(@int_val, int_val)
222
+ assert_in_delta(@flt_val, flt_val, Delta)
223
+ assert_in_delta(@num_val, num_val, Delta)
224
+ assert_in_delta(@bdbl_val, bdbl_val, Delta)
225
+ assert_in_delta(@bflt_val, bflt_val, Delta)
226
+ assert_equal(@str_val, str_val)
227
+ assert_equal(@raw_val, raw_val)
228
+ assert_equal(@clob_val, clob_val)
229
+ assert_equal(@nclob_val, nclob_val)
230
+ assert_equal(@blob_val, blob_val)
231
+ assert_equal(@obj_val, obj_val)
232
+ assert_equal(@int_array_val, int_array_val && int_array_val.to_ary)
233
+ assert_array_in_delta(@flt_array_val, flt_array_val && flt_array_val.to_ary)
234
+ assert_array_in_delta(@num_array_val, num_array_val && num_array_val.to_ary)
235
+ assert_array_in_delta(@bdbl_array_val, bdbl_array_val && bdbl_array_val.to_ary)
236
+ assert_array_in_delta(@bflt_array_val, bflt_array_val && bflt_array_val.to_ary)
237
+ assert_equal(@str_array_val, str_array_val && str_array_val.to_ary)
238
+ assert_equal(@raw_array_val, raw_array_val && raw_array_val.to_ary)
239
+ assert_equal(@obj_array_val, obj_array_val && obj_array_val.to_ary)
240
+ assert_equal(@obj_ary_of_ary_val, obj_ary_of_ary_val && obj_ary_of_ary_val.to_ary.collect { |elem| elem.to_ary })
241
+ assert_equal(@date_val, date_val)
242
+ # assert_equal(@date_array_val, date_array_val && date_array_val.to_ary)
243
+ end
244
+
245
+ def assert_array_in_delta(exp, val)
246
+ if exp && val
247
+ assert_equal(exp.size, val.size)
248
+ exp.each_with_index do |elem, idx|
249
+ assert_in_delta(elem, val[idx], Delta)
250
+ end
251
+ else
252
+ assert_equal(exp, val)
253
+ end
254
+ end
255
+ end
256
+
257
+ def test_select1
258
+ expected_val = ExpectedVal.new
259
+ @conn.exec("select * from rb_test_obj_tab1 order by n") do |row|
260
+ assert(expected_val.next)
261
+
262
+ assert_in_delta(expected_val.n, row[0], Delta)
263
+ expected_val.should_be_equal(row[1])
264
+ end
265
+ assert(!expected_val.next)
266
+ end
267
+
268
+ def test_select2
269
+ expected_val = ExpectedVal.new
270
+ orig_val = OCI8::BindType::Mapping[:date]
271
+ begin
272
+ @conn.exec("select * from rb_test_obj_tab2 order by int_val") do |row|
273
+ assert(expected_val.next)
274
+ expected_val.should_be_equal(row)
275
+ end
276
+ assert(!expected_val.next)
277
+ ensure
278
+ OCI8::BindType::Mapping[:date] = orig_val
279
+ end
280
+ end
281
+
282
+ def test_select3
283
+ expected_val = ExpectedVal.new
284
+ @conn.exec("select value(p) from rb_test_obj_tab2 p order by int_val") do |row|
285
+ assert(expected_val.next)
286
+ expected_val.should_be_equal(row[0])
287
+ end
288
+ assert(!expected_val.next)
289
+ end
290
+
291
+ def _test_select4 # TODO
292
+ expected_val = ExpectedVal.new
293
+ @conn.exec("select ref(p) from rb_test_obj_tab2 p order by int_val") do |row|
294
+ assert(expected_val.next)
295
+
296
+ expected_val.should_be_equal(row[0])
297
+ end
298
+ assert(!expected_val.next)
299
+ end
300
+
301
+ def test_explicit_constructor
302
+ expected_val = ExpectedVal.new
303
+ while expected_val.next
304
+ obj = RbTestObj.new(expected_val.n)
305
+ expected_val.should_be_equal(obj)
306
+ assert_nothing_raised do
307
+ obj.inspect
308
+ end
309
+ end
310
+ end
311
+
312
+ def _test_implicit_constructor # TODO
313
+ expected_val = ExpectedVal.new
314
+ while expected_val.next
315
+ obj = RbTestObj.new(expected_val.int_val, expected_val.flt_val, expected_val.str_val, expected_val.raw_val, expected_val.str_array_val, expected_val.raw_array_val, expected_val.num_array_val)
316
+ expected_val.should_be_equal(obj)
317
+ end
318
+ end
319
+
320
+ def _test_implicit_constructor2 # TODO
321
+ obj = nil
322
+ assert_nothing_raised do
323
+ obj = RbTestObj.new(nil, nil, nil)
324
+ end
325
+ assert_nil(obj.int_val)
326
+ assert_nil(obj.flt_val)
327
+ assert_nil(obj.str_val)
328
+ end
329
+
330
+ def _test_class_func
331
+ expected_val = ExpectedVal.new
332
+ while expected_val.next
333
+ obj = RbTestObj.class_func(expected_val.n)
334
+ expected_val.should_be_equal(obj)
335
+ end
336
+ end
337
+
338
+ def test_class_proc1
339
+ expected_val = ExpectedVal.new
340
+ while expected_val.next
341
+ obj = RbTestObj.new(0)
342
+ RbTestObj.class_proc1(obj, expected_val.n)
343
+ expected_val.should_be_equal(obj)
344
+ end
345
+ end
346
+
347
+ def _test_class_proc2
348
+ expected_val = ExpectedVal.new
349
+ while expected_val.next
350
+ obj = RbTestObj.new
351
+ obj.int_val = expected_val.int_val - 1
352
+ obj.flt_val = expected_val.flt_val
353
+ obj.num_val = expected_val.num_val
354
+ obj.bdbl_val = expected_val.bdbl_val
355
+ obj.bflt_val = expected_val.bflt_val
356
+ obj.str_val = expected_val.str_val
357
+ obj.raw_val = expected_val.raw_val
358
+ obj.clob_val = expected_val.clob_val
359
+ obj.nclob_val = expected_val.nclob_val
360
+ obj.blob_val = expected_val.blob_val
361
+ obj.obj_val = expected_val.obj_val
362
+ obj.int_array_val = expected_val.int_array_val
363
+ obj.flt_array_val = expected_val.flt_array_val
364
+ obj.num_array_val = expected_val.num_array_val
365
+ obj.bdbl_array_val = expected_val.bdbl_array_val
366
+ obj.bflt_array_val = expected_val.bflt_array_val
367
+ obj.str_array_val = expected_val.str_array_val
368
+ obj.raw_array_val = expected_val.raw_array_val
369
+ obj.obj_array_val = expected_val.obj_array_val
370
+ obj.obj_ary_of_ary_val = expected_val.obj_ary_of_ary_val
371
+ RbTestObj.class_proc2(obj)
372
+ expected_val.should_be_equal(obj)
373
+ end
374
+ end
375
+
376
+ def test_member_func
377
+ expected_val = ExpectedVal.new
378
+ while expected_val.next
379
+ obj = RbTestObj.new(expected_val.n)
380
+ assert_equal(expected_val.int_val, obj.member_func)
381
+ end
382
+ end
383
+
384
+ def _test_plsql_member_func
385
+ expected_val = ExpectedVal.new
386
+ while expected_val.next
387
+ obj = RbTestObj.new(expected_val.n)
388
+ rv = @conn.exec(<<EOS, obj, [nil, Integer])
389
+ declare
390
+ obj rb_test_obj := :obj;
391
+ begin
392
+ :rv := obj.member_func;
393
+ end;
394
+ EOS
395
+ assert_equal(expected_val.int_val, rv[1])
396
+ end
397
+ end
398
+
399
+ def test_member_proc
400
+ expected_val = ExpectedVal.new
401
+ while expected_val.next
402
+ obj = RbTestObj.new
403
+ obj.member_proc(expected_val.int_val)
404
+ assert_equal(expected_val.int_val, obj.int_val)
405
+ end
406
+ end
407
+
408
+ def test_bind_nil
409
+ csr = @conn.parse(<<EOS)
410
+ DECLARE
411
+ obj RB_TEST_OBJ := :in;
412
+ BEGIN
413
+ IF obj IS NULL THEN
414
+ :out := 'IS NULL';
415
+ ELSE
416
+ :out := 'IS NOT NULL';
417
+ END IF;
418
+ END;
419
+ EOS
420
+ csr.bind_param(:in, nil, RbTestObj)
421
+ csr.bind_param(:out, nil, String, 11)
422
+ csr.exec
423
+ assert_equal('IS NULL', csr[:out])
424
+ csr[:in] = RbTestObj.new(@conn)
425
+ csr.exec
426
+ assert_equal('IS NOT NULL', csr[:out])
427
+ csr[:in] = nil
428
+ csr.exec
429
+ assert_equal('IS NULL', csr[:out])
430
+ end
431
+
432
+ def test_bind_array
433
+ csr = @conn.parse <<EOS
434
+ DECLARE
435
+ ary RB_TEST_INT_ARRAY := :in;
436
+ BEGIN
437
+ IF ary IS NULL THEN
438
+ :cnt := -1;
439
+ ELSE
440
+ :cnt := ary.count;
441
+ IF :cnt != 0 THEN
442
+ :out1 := ary(1);
443
+ :out2 := ary(2);
444
+ :out3 := ary(3);
445
+ END IF;
446
+ END IF;
447
+ END;
448
+ EOS
449
+ [nil, [], [1, nil, 3]].each do |ary|
450
+ csr.bind_param(:in, ary, RbTestIntArray)
451
+ csr.bind_param(:cnt, nil, Integer)
452
+ csr.bind_param(:out1, nil, Integer)
453
+ csr.bind_param(:out2, nil, Integer)
454
+ csr.bind_param(:out3, nil, Integer)
455
+ csr.exec
456
+ assert_equal(ary ? ary.length : -1, csr[:cnt])
457
+ assert_equal(ary ? ary[0] : nil, csr[:out1])
458
+ assert_equal(ary ? ary[1] : nil, csr[:out2])
459
+ assert_equal(ary ? ary[2] : nil, csr[:out3])
460
+ end
461
+ end
462
+ end