ruby-oci8 2.2.10-x64-mingw-ucrt

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +14 -0
  3. data/COPYING +30 -0
  4. data/COPYING_old +64 -0
  5. data/ChangeLog +3826 -0
  6. data/Makefile +92 -0
  7. data/NEWS +1209 -0
  8. data/README.md +66 -0
  9. data/dist-files +112 -0
  10. data/docs/bind-array-to-in_cond.md +38 -0
  11. data/docs/conflicts-local-connections-and-processes.md +98 -0
  12. data/docs/hanging-after-inactivity.md +63 -0
  13. data/docs/install-binary-package.md +44 -0
  14. data/docs/install-full-client.md +111 -0
  15. data/docs/install-instant-client.md +194 -0
  16. data/docs/install-on-osx.md +46 -0
  17. data/docs/ldap-auth-and-function-interposition.md +123 -0
  18. data/docs/number-type-mapping.md +79 -0
  19. data/docs/platform-specific-issues.md +164 -0
  20. data/docs/report-installation-issue.md +50 -0
  21. data/docs/timeout-parameters.md +94 -0
  22. data/lib/.document +1 -0
  23. data/lib/dbd/OCI8.rb +591 -0
  24. data/lib/oci8/.document +8 -0
  25. data/lib/oci8/bindtype.rb +333 -0
  26. data/lib/oci8/check_load_error.rb +146 -0
  27. data/lib/oci8/compat.rb +117 -0
  28. data/lib/oci8/connection_pool.rb +179 -0
  29. data/lib/oci8/cursor.rb +605 -0
  30. data/lib/oci8/datetime.rb +605 -0
  31. data/lib/oci8/encoding-init.rb +45 -0
  32. data/lib/oci8/encoding.yml +537 -0
  33. data/lib/oci8/metadata.rb +2148 -0
  34. data/lib/oci8/object.rb +641 -0
  35. data/lib/oci8/oci8.rb +756 -0
  36. data/lib/oci8/ocihandle.rb +591 -0
  37. data/lib/oci8/oracle_version.rb +153 -0
  38. data/lib/oci8/properties.rb +196 -0
  39. data/lib/oci8/version.rb +3 -0
  40. data/lib/oci8.rb +190 -0
  41. data/lib/oci8lib_310.so +0 -0
  42. data/lib/ruby-oci8.rb +1 -0
  43. data/metaconfig +142 -0
  44. data/pre-distclean.rb +7 -0
  45. data/ruby-oci8.gemspec +85 -0
  46. data/setup.rb +1342 -0
  47. data/test/README.md +37 -0
  48. data/test/config.rb +201 -0
  49. data/test/setup_test_object.sql +199 -0
  50. data/test/setup_test_package.sql +59 -0
  51. data/test/test_all.rb +56 -0
  52. data/test/test_appinfo.rb +62 -0
  53. data/test/test_array_dml.rb +332 -0
  54. data/test/test_bind_array.rb +70 -0
  55. data/test/test_bind_boolean.rb +99 -0
  56. data/test/test_bind_integer.rb +47 -0
  57. data/test/test_bind_raw.rb +45 -0
  58. data/test/test_bind_string.rb +105 -0
  59. data/test/test_bind_time.rb +177 -0
  60. data/test/test_break.rb +125 -0
  61. data/test/test_clob.rb +85 -0
  62. data/test/test_connection_pool.rb +124 -0
  63. data/test/test_connstr.rb +220 -0
  64. data/test/test_datetime.rb +585 -0
  65. data/test/test_dbi.rb +365 -0
  66. data/test/test_dbi_clob.rb +53 -0
  67. data/test/test_encoding.rb +103 -0
  68. data/test/test_error.rb +87 -0
  69. data/test/test_metadata.rb +2674 -0
  70. data/test/test_object.rb +546 -0
  71. data/test/test_oci8.rb +624 -0
  72. data/test/test_oracle_version.rb +68 -0
  73. data/test/test_oradate.rb +255 -0
  74. data/test/test_oranumber.rb +792 -0
  75. data/test/test_package_type.rb +981 -0
  76. data/test/test_properties.rb +17 -0
  77. data/test/test_rowid.rb +32 -0
  78. metadata +123 -0
@@ -0,0 +1,981 @@
1
+ require 'oci8'
2
+ require File.dirname(__FILE__) + '/config'
3
+
4
+ if $oracle_version < OCI8::ORAVER_12_1
5
+ raise "Package types are not supported in this Oracle version."
6
+ end
7
+
8
+ conn = OCI8.new($dbuser, $dbpass, $dbname)
9
+ test_package_version = nil
10
+ begin
11
+ cursor = conn.parse('begin :1 := rb_test_pkg.package_version; end;')
12
+ cursor.bind_param(1, nil, Integer)
13
+ cursor.exec
14
+ test_package_version = cursor[1]
15
+ cursor.close
16
+ rescue OCIError
17
+ raise if $!.code != 6550
18
+ end
19
+ raise <<EOS if test_package_version != 1
20
+ You need to execute SQL statements in #{File.dirname(__FILE__)}/setup_test_package.sql as follows:
21
+
22
+ $ sqlplus USERNAME/PASSWORD
23
+ SQL> @test/setup_test_package.sql
24
+
25
+ EOS
26
+
27
+ class TestPackageType < Minitest::Test
28
+ def setup
29
+ @conn = get_oci8_connection
30
+ end
31
+
32
+ def teardown
33
+ @conn.logoff
34
+ end
35
+
36
+ def check_attributes(msg, obj, attrs)
37
+ attrs.each do |method, expected_value|
38
+ val = method.is_a?(Array) ? obj[method[0]] : obj.send(method)
39
+ if expected_value.is_a? Hash
40
+ check_attributes("#{msg} > #{method}", val, expected_value)
41
+ elsif expected_value.nil?
42
+ assert_nil(val, "#{msg} > #{method}")
43
+ else
44
+ assert_equal(expected_value, val, "#{msg} > #{method}")
45
+ end
46
+ end
47
+ end
48
+
49
+ def test_describe_package
50
+ integer_type_attrs = {
51
+ :class => OCI8::Metadata::Type,
52
+ #:typecode => nil,
53
+ #:collection_typecode => nil,
54
+ :is_incomplete_type? => false,
55
+ :is_system_type? => true,
56
+ :is_predefined_type? => true,
57
+ :is_transient_type? => false,
58
+ :is_system_generated_type? => false,
59
+ :has_nested_table? => false,
60
+ :has_lob? => false,
61
+ :has_file? => false,
62
+ #:collection_element => nil,
63
+ :num_type_attrs => 0,
64
+ :num_type_methods => 0,
65
+ #:map_method => nil,
66
+ #:order_method => nil,
67
+ :is_invoker_rights? => false,
68
+ :name => 'INTEGER',
69
+ :schema_name => 'SYS',
70
+ :is_final_type? => true,
71
+ :is_instantiable_type? => true,
72
+ :is_subtype? => false,
73
+ :supertype_schema_name => nil,
74
+ :supertype_name => nil,
75
+ :package_name => nil,
76
+ :type_attrs => [],
77
+ #:type_methods => [],
78
+ :inspect => '#<OCI8::Metadata::Type:(0) SYS.INTEGER>', # TODO: change to "INTEGER"
79
+ }
80
+
81
+ pls_integer_type_attrs = {
82
+ :class => OCI8::Metadata::Type,
83
+ #:typecode => nil,
84
+ #:collection_typecode => nil,
85
+ :is_incomplete_type? => false,
86
+ :is_system_type? => true,
87
+ :is_predefined_type? => true,
88
+ :is_transient_type? => false,
89
+ :is_system_generated_type? => false,
90
+ :has_nested_table? => false,
91
+ :has_lob? => false,
92
+ :has_file? => false,
93
+ #:collection_element => nil,
94
+ :num_type_attrs => 0,
95
+ :num_type_methods => 0,
96
+ #:map_method => nil,
97
+ #:order_method => nil,
98
+ :is_invoker_rights? => false,
99
+ :name => 'PL/SQL PLS INTEGER',
100
+ :schema_name => 'SYS',
101
+ :is_final_type? => true,
102
+ :is_instantiable_type? => true,
103
+ :is_subtype? => false,
104
+ :supertype_schema_name => nil,
105
+ :supertype_name => nil,
106
+ :package_name => nil,
107
+ :type_attrs => [],
108
+ #:type_methods => [],
109
+ :inspect => '#<OCI8::Metadata::Type:(0) SYS.PL/SQL PLS INTEGER>', # TODO: change to "PLS_INTEGER"
110
+ }
111
+
112
+ boolean_type_attrs = {
113
+ :class => OCI8::Metadata::Type,
114
+ #:typecode => nil,
115
+ #:collection_typecode => nil,
116
+ :is_incomplete_type? => false,
117
+ :is_system_type? => true,
118
+ :is_predefined_type? => true,
119
+ :is_transient_type? => false,
120
+ :is_system_generated_type? => false,
121
+ :has_nested_table? => false,
122
+ :has_lob? => false,
123
+ :has_file? => false,
124
+ #:collection_element => nil,
125
+ :num_type_attrs => 0,
126
+ :num_type_methods => 0,
127
+ #:map_method => nil,
128
+ #:order_method => nil,
129
+ :is_invoker_rights? => false,
130
+ :name => 'PL/SQL BOOLEAN',
131
+ :schema_name => 'SYS',
132
+ :is_final_type? => true,
133
+ :is_instantiable_type? => true,
134
+ :is_subtype? => false,
135
+ :supertype_schema_name => nil,
136
+ :supertype_name => nil,
137
+ :package_name => nil,
138
+ :type_attrs => [],
139
+ #:type_methods => [],
140
+ :inspect => '#<OCI8::Metadata::Type:(0) SYS.PL/SQL BOOLEAN>', # TODO: change to "BOOLEAN"
141
+ }
142
+
143
+ varchar2_type_attrs = {
144
+ :class => OCI8::Metadata::Type,
145
+ #:typecode => nil,
146
+ #:collection_typecode => nil,
147
+ :is_incomplete_type? => false,
148
+ :is_system_type? => true,
149
+ :is_predefined_type? => true,
150
+ :is_transient_type? => false,
151
+ :is_system_generated_type? => false,
152
+ :has_nested_table? => false,
153
+ :has_lob? => false,
154
+ :has_file? => false,
155
+ #:collection_element => nil,
156
+ :num_type_attrs => 0,
157
+ :num_type_methods => 0,
158
+ #:map_method => nil,
159
+ #:order_method => nil,
160
+ :is_invoker_rights? => false,
161
+ :name => 'VARCHAR2',
162
+ :schema_name => 'SYS',
163
+ :is_final_type? => true,
164
+ :is_instantiable_type? => true,
165
+ :is_subtype? => false,
166
+ :supertype_schema_name => nil,
167
+ :supertype_name => nil,
168
+ :package_name => nil,
169
+ :type_attrs => [],
170
+ #:type_methods => #[],
171
+ :inspect => '#<OCI8::Metadata::Type:(0) SYS.VARCHAR2>', # TODO: change to "VARCHAR2"
172
+ }
173
+
174
+ array_of_integer_type_attrs = {
175
+ :class => OCI8::Metadata::Type,
176
+ :typecode => :named_collection,
177
+ :collection_typecode => :varray,
178
+ :is_incomplete_type? => false,
179
+ :is_system_type? => false,
180
+ :is_predefined_type? => false,
181
+ :is_transient_type? => false,
182
+ :is_system_generated_type? => false,
183
+ :has_nested_table? => false,
184
+ :has_lob? => false,
185
+ :has_file? => false,
186
+ :collection_element => {
187
+ :class => OCI8::Metadata::Collection,
188
+ :data_size => 22,
189
+ :typecode => :integer,
190
+ :data_type => :number,
191
+ :num_elems => 50,
192
+ :precision => 38,
193
+ :scale => 0,
194
+ :type_name => 'INTEGER',
195
+ :schema_name => 'SYS',
196
+ :type_metadata => integer_type_attrs,
197
+ :inspect => '#<OCI8::Metadata::Collection: NUMBER(38)>', # TODO: change to "INTEGER"
198
+ },
199
+ :num_type_attrs => 0,
200
+ :num_type_methods => 0,
201
+ :map_method => nil,
202
+ :order_method => nil,
203
+ :is_invoker_rights? => false,
204
+ :name => 'ARRAY_OF_INTEGER',
205
+ :schema_name => @conn.username,
206
+ :is_final_type? => true,
207
+ :is_instantiable_type? => true,
208
+ :is_subtype? => false,
209
+ :supertype_schema_name => nil,
210
+ :supertype_name => nil,
211
+ :package_name => 'RB_TEST_PKG',
212
+ :type_attrs => [],
213
+ :type_methods => [],
214
+ :inspect => "#<OCI8::Metadata::Type:(0) #{@conn.username}.ARRAY_OF_INTEGER>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.ARRAY_OF_INTEGER"
215
+ }
216
+
217
+ table_of_pls_integer_type_attrs = {
218
+ :class => OCI8::Metadata::Type,
219
+ :typecode => :named_collection,
220
+ :collection_typecode => :table,
221
+ :is_incomplete_type? => false,
222
+ :is_system_type? => false,
223
+ :is_predefined_type? => false,
224
+ :is_transient_type? => false,
225
+ :is_system_generated_type? => false,
226
+ :has_nested_table? => true,
227
+ :has_lob? => false,
228
+ :has_file? => false,
229
+ :collection_element => {
230
+ :class => OCI8::Metadata::Collection,
231
+ :data_size => 0,
232
+ :typecode => :pls_integer,
233
+ :data_type => :pls_integer,
234
+ :num_elems => 0,
235
+ :precision => 0,
236
+ :scale => 0,
237
+ :type_name => 'PL/SQL PLS INTEGER',
238
+ :schema_name => 'SYS',
239
+ :type_metadata => pls_integer_type_attrs,
240
+ :inspect => '#<OCI8::Metadata::Collection: PLS_INTEGER>',
241
+ },
242
+ :num_type_attrs => 0,
243
+ :num_type_methods => 0,
244
+ :map_method => nil,
245
+ :order_method => nil,
246
+ :is_invoker_rights? => false,
247
+ :name => 'TABLE_OF_PLS_INTEGER',
248
+ :schema_name => @conn.username,
249
+ :is_final_type? => true,
250
+ :is_instantiable_type? => true,
251
+ :is_subtype? => false,
252
+ :supertype_schema_name => nil,
253
+ :supertype_name => nil,
254
+ :package_name => 'RB_TEST_PKG',
255
+ :type_attrs => [],
256
+ :type_methods => [],
257
+ :inspect => "#<OCI8::Metadata::Type:(0) #{@conn.username}.TABLE_OF_PLS_INTEGER>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.TABLE_OF_PLS_INTEGER"
258
+ }
259
+
260
+ table_of_boolean_type_attrs = {
261
+ :class => OCI8::Metadata::Type,
262
+ :typecode => :named_collection,
263
+ :collection_typecode => :table,
264
+ :is_incomplete_type? => false,
265
+ :is_system_type? => false,
266
+ :is_predefined_type? => false,
267
+ :is_transient_type? => false,
268
+ :is_system_generated_type? => false,
269
+ :has_nested_table? => true,
270
+ :has_lob? => false,
271
+ :has_file? => false,
272
+ :collection_element => {
273
+ :class => OCI8::Metadata::Collection,
274
+ :data_size => 0,
275
+ :typecode => :boolean,
276
+ :data_type => :boolean,
277
+ :num_elems => 0,
278
+ :precision => 0,
279
+ :scale => 0,
280
+ :type_name => 'PL/SQL BOOLEAN',
281
+ :schema_name => 'SYS',
282
+ :type_metadata => boolean_type_attrs,
283
+ :inspect => '#<OCI8::Metadata::Collection: BOOLEAN>',
284
+ },
285
+ :num_type_attrs => 0,
286
+ :num_type_methods => 0,
287
+ :map_method => nil,
288
+ :order_method => nil,
289
+ :is_invoker_rights? => false,
290
+ :name => 'TABLE_OF_BOOLEAN',
291
+ :schema_name => @conn.username,
292
+ :is_final_type? => true,
293
+ :is_instantiable_type? => true,
294
+ :is_subtype? => false,
295
+ :supertype_schema_name => nil,
296
+ :supertype_name => nil,
297
+ :package_name => 'RB_TEST_PKG',
298
+ :type_attrs => [],
299
+ :type_methods => [],
300
+ :inspect => "#<OCI8::Metadata::Type:(0) #{@conn.username}.TABLE_OF_BOOLEAN>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.TABLE_OF_BOOLEAN"
301
+ }
302
+
303
+ indexed_table_of_varchar2_type_attrs = {
304
+ :class => OCI8::Metadata::Type,
305
+ :typecode => :named_collection,
306
+ :collection_typecode => :itable,
307
+ :is_incomplete_type? => false,
308
+ :is_system_type? => false,
309
+ :is_predefined_type? => false,
310
+ :is_transient_type? => false,
311
+ :is_system_generated_type? => false,
312
+ :has_nested_table? => false,
313
+ :has_lob? => false,
314
+ :has_file? => false,
315
+ :collection_element => {
316
+ :class => OCI8::Metadata::Collection,
317
+ :data_size => 10,
318
+ :typecode => :varchar2,
319
+ :data_type => :varchar2,
320
+ :num_elems => 5,
321
+ :precision => 0,
322
+ :scale => 0,
323
+ :type_name => 'VARCHAR2',
324
+ :schema_name => 'SYS',
325
+ :type_metadata => varchar2_type_attrs,
326
+ :inspect => '#<OCI8::Metadata::Collection: VARCHAR2(10)>',
327
+ },
328
+ :num_type_attrs => 0,
329
+ :num_type_methods => 0,
330
+ :map_method => nil,
331
+ :order_method => nil,
332
+ :is_invoker_rights? => false,
333
+ :name => 'INDEXED_TABLE_OF_VARCHAR2',
334
+ :schema_name => @conn.username,
335
+ :is_final_type? => true,
336
+ :is_instantiable_type? => true,
337
+ :is_subtype? => false,
338
+ :supertype_schema_name => nil,
339
+ :supertype_name => nil,
340
+ :package_name => 'RB_TEST_PKG',
341
+ :type_attrs => [],
342
+ :type_methods => [],
343
+ :inspect => "#<OCI8::Metadata::Type:(0) #{@conn.username}.INDEXED_TABLE_OF_VARCHAR2>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.INDEXED_TABLE_OF_VARCHAR2"
344
+ }
345
+
346
+ rec1_type_attrs = {
347
+ :class => OCI8::Metadata::Type,
348
+ :typecode => :record,
349
+ :collection_typecode => nil,
350
+ :is_incomplete_type? => false,
351
+ :is_system_type? => false,
352
+ :is_predefined_type? => false,
353
+ :is_transient_type? => false,
354
+ :is_system_generated_type? => false,
355
+ :has_nested_table? => false,
356
+ :has_lob? => false,
357
+ :has_file? => false,
358
+ :collection_element => nil,
359
+ :num_type_attrs => 2,
360
+ :num_type_methods => 0,
361
+ :map_method => nil,
362
+ :order_method => nil,
363
+ :is_invoker_rights? => false,
364
+ :name => 'REC1',
365
+ :schema_name => @conn.username,
366
+ :is_final_type? => true,
367
+ :is_instantiable_type? => true,
368
+ :is_subtype? => false,
369
+ :supertype_schema_name => nil,
370
+ :supertype_name => nil,
371
+ :package_name => 'RB_TEST_PKG',
372
+ :type_attrs => {
373
+ :class => Array,
374
+ :size => 2,
375
+ [0] => {
376
+ :class => OCI8::Metadata::TypeAttr,
377
+ :data_size => 0,
378
+ :typecode => :pls_integer,
379
+ :data_type => :pls_integer,
380
+ :name => 'I',
381
+ :precision => 0,
382
+ :scale => 0,
383
+ :type_name => 'PL/SQL PLS INTEGER',
384
+ :schema_name => 'SYS',
385
+ :fsprecision => 0,
386
+ :lfprecision => 0,
387
+ :type_metadata => pls_integer_type_attrs,
388
+ :inspect => '#<OCI8::Metadata::TypeAttr: I PLS_INTEGER>',
389
+ },
390
+ [1] => {
391
+ :class => OCI8::Metadata::TypeAttr,
392
+ :data_size => 22,
393
+ :typecode => :integer,
394
+ :data_type => :number,
395
+ :name => 'J',
396
+ :precision => 38,
397
+ :scale => 0,
398
+ :type_name => 'INTEGER',
399
+ :schema_name => 'SYS',
400
+ :fsprecision => 0,
401
+ :lfprecision => 0,
402
+ :type_metadata => integer_type_attrs,
403
+ :inspect => '#<OCI8::Metadata::TypeAttr: J NUMBER(38)>', # TODO: change to "INTEGER"
404
+ },
405
+ },
406
+ :type_methods => [],
407
+ :inspect => "#<OCI8::Metadata::Type:(0) #{@conn.username}.REC1>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.REC1"
408
+ }
409
+
410
+ rec2_type_attrs = {
411
+ :class => OCI8::Metadata::Type,
412
+ :typecode => :record,
413
+ :collection_typecode => nil,
414
+ :is_incomplete_type? => false,
415
+ :is_system_type? => false,
416
+ :is_predefined_type? => false,
417
+ :is_transient_type? => false,
418
+ :is_system_generated_type? => false,
419
+ :has_nested_table? => false,
420
+ :has_lob? => false,
421
+ :has_file? => false,
422
+ :collection_element => nil,
423
+ :num_type_attrs => 3,
424
+ :num_type_methods => 0,
425
+ :map_method => nil,
426
+ :order_method => nil,
427
+ :is_invoker_rights? => false,
428
+ :name => 'REC2',
429
+ :schema_name => @conn.username,
430
+ :is_final_type? => true,
431
+ :is_instantiable_type? => true,
432
+ :is_subtype? => false,
433
+ :supertype_schema_name => nil,
434
+ :supertype_name => nil,
435
+ :package_name => 'RB_TEST_PKG',
436
+ :type_attrs => {
437
+ :class => Array,
438
+ :size => 3,
439
+ [0] => {
440
+ :class => OCI8::Metadata::TypeAttr,
441
+ :data_size => 0,
442
+ :typecode => :boolean,
443
+ :data_type => :boolean,
444
+ :name => 'B',
445
+ :precision => 0,
446
+ :scale => 0,
447
+ :type_name => 'PL/SQL BOOLEAN',
448
+ :schema_name => 'SYS',
449
+ :fsprecision => 0,
450
+ :lfprecision => 0,
451
+ :type_metadata => boolean_type_attrs,
452
+ :inspect => '#<OCI8::Metadata::TypeAttr: B BOOLEAN>',
453
+ },
454
+ [1] => {
455
+ :class => OCI8::Metadata::TypeAttr,
456
+ :data_size => 0,
457
+ :typecode => :named_collection,
458
+ :data_type => :named_type,
459
+ :name => 'IT',
460
+ :precision => 0,
461
+ :scale => 0,
462
+ :type_name => 'INDEXED_TABLE_OF_VARCHAR2',
463
+ :schema_name => @conn.username,
464
+ :fsprecision => 0,
465
+ :lfprecision => 0,
466
+ :type_metadata => indexed_table_of_varchar2_type_attrs,
467
+ :inspect => "#<OCI8::Metadata::TypeAttr: IT #{@conn.username}.INDEXED_TABLE_OF_VARCHAR2>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.INDEXED_TABLE_OF_VARCHAR2"
468
+ },
469
+ [2] => {
470
+ :class => OCI8::Metadata::TypeAttr,
471
+ :data_size => 0,
472
+ :typecode => :record,
473
+ :data_type => :record,
474
+ :name => 'REC',
475
+ :precision => 0,
476
+ :scale => 0,
477
+ :type_name => 'REC1',
478
+ :schema_name => @conn.username,
479
+ :fsprecision => 0,
480
+ :lfprecision => 0,
481
+ :type_metadata => rec1_type_attrs,
482
+ :inspect => "#<OCI8::Metadata::TypeAttr: REC #{@conn.username}.REC1>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.REC1"
483
+ },
484
+ },
485
+ :type_methods => [],
486
+ :inspect => "#<OCI8::Metadata::Type:(0) #{@conn.username}.REC2>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.REC2"
487
+ }
488
+
489
+ table_of_rec1_type_attrs = {
490
+ :class => OCI8::Metadata::Type,
491
+ :typecode => :named_collection,
492
+ :collection_typecode => :table,
493
+ :is_incomplete_type? => false,
494
+ :is_system_type? => false,
495
+ :is_predefined_type? => false,
496
+ :is_transient_type? => false,
497
+ :is_system_generated_type? => false,
498
+ :has_nested_table? => true,
499
+ :has_lob? => false,
500
+ :has_file? => false,
501
+ :collection_element => {
502
+ :class => OCI8::Metadata::Collection,
503
+ :data_size => 0,
504
+ :typecode => :record,
505
+ :data_type => :record,
506
+ :num_elems => 0,
507
+ :precision => 0,
508
+ :scale => 0,
509
+ :type_name => 'REC1',
510
+ :schema_name => @conn.username,
511
+ :type_metadata => rec1_type_attrs,
512
+ :inspect => "#<OCI8::Metadata::Collection: #{@conn.username}.REC1>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.REC1"
513
+ },
514
+ :num_type_attrs => 0,
515
+ :num_type_methods => 0,
516
+ :map_method => nil,
517
+ :order_method => nil,
518
+ :is_invoker_rights? => false,
519
+ :name => 'TABLE_OF_REC1',
520
+ :schema_name => @conn.username,
521
+ :is_final_type? => true,
522
+ :is_instantiable_type? => true,
523
+ :is_subtype? => false,
524
+ :supertype_schema_name => nil,
525
+ :supertype_name => nil,
526
+ :package_name => 'RB_TEST_PKG',
527
+ :type_attrs => [],
528
+ :type_methods => [],
529
+ :inspect => "#<OCI8::Metadata::Type:(0) #{@conn.username}.TABLE_OF_REC1>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.TABLE_OF_REC1"
530
+ }
531
+
532
+ table_of_rec2_type_attrs = {
533
+ :class => OCI8::Metadata::Type,
534
+ :typecode => :named_collection,
535
+ :collection_typecode => :table,
536
+ :is_incomplete_type? => false,
537
+ :is_system_type? => false,
538
+ :is_predefined_type? => false,
539
+ :is_transient_type? => false,
540
+ :is_system_generated_type? => false,
541
+ :has_nested_table? => true,
542
+ :has_lob? => false,
543
+ :has_file? => false,
544
+ :collection_element => {
545
+ :class => OCI8::Metadata::Collection,
546
+ :data_size => 0,
547
+ :typecode => :record,
548
+ :data_type => :record,
549
+ :num_elems => 0,
550
+ :precision => 0,
551
+ :scale => 0,
552
+ :type_name => 'REC2',
553
+ :schema_name => @conn.username,
554
+ :type_metadata => rec2_type_attrs,
555
+ :inspect => "#<OCI8::Metadata::Collection: #{@conn.username}.REC2>",
556
+ #:inspect => "#<OCI8::Metadata::Collection: #{@conn.username}.RB_TEST_PKG.REC2>",
557
+ },
558
+ :num_type_attrs => 0,
559
+ :num_type_methods => 0,
560
+ :map_method => nil,
561
+ :order_method => nil,
562
+ :is_invoker_rights? => false,
563
+ :name => 'TABLE_OF_REC2',
564
+ :schema_name => @conn.username,
565
+ :is_final_type? => true,
566
+ :is_instantiable_type? => true,
567
+ :is_subtype? => false,
568
+ :supertype_schema_name => nil,
569
+ :supertype_name => nil,
570
+ :package_name => 'RB_TEST_PKG',
571
+ :type_attrs => [],
572
+ :type_methods => [],
573
+ :inspect => "#<OCI8::Metadata::Type:(0) #{@conn.username}.TABLE_OF_REC2>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.TABLE_OF_REC2"
574
+ }
575
+
576
+ type_metadata_attrs = {
577
+ 'ARRAY_OF_INTEGER' => array_of_integer_type_attrs,
578
+ 'TABLE_OF_PLS_INTEGER' => table_of_pls_integer_type_attrs,
579
+ 'TABLE_OF_BOOLEAN' => table_of_boolean_type_attrs,
580
+ 'INDEXED_TABLE_OF_VARCHAR2' => indexed_table_of_varchar2_type_attrs,
581
+ 'REC1' => rec1_type_attrs,
582
+ 'REC2' => rec2_type_attrs,
583
+ 'TABLE_OF_REC1' => table_of_rec1_type_attrs,
584
+ 'TABLE_OF_REC2' => table_of_rec2_type_attrs,
585
+ }
586
+
587
+ sum_table_of_pls_integer_subprogram_attrs = {
588
+ :class => OCI8::Metadata::Function,
589
+ :obj_name => 'SUM_TABLE_OF_PLS_INTEGER',
590
+ :obj_schema => nil,
591
+ :is_invoker_rights? => false,
592
+ :name => 'SUM_TABLE_OF_PLS_INTEGER',
593
+ :overload_id => 0,
594
+ :arguments => {
595
+ :class => Array,
596
+ :size => 2,
597
+ [0] => {
598
+ :class => OCI8::Metadata::Argument,
599
+ :obj_name => nil,
600
+ :obj_schema => nil,
601
+ :name => "",
602
+ :position => 0,
603
+ #:typecode => nil,
604
+ :data_type => 3,
605
+ :data_size => 0,
606
+ :precision => 0,
607
+ :scale => 0,
608
+ :level => 0,
609
+ :has_default => 0,
610
+ :has_default? => false,
611
+ :iomode => :out,
612
+ :radix => 0,
613
+ :type_name => "",
614
+ :schema_name => "",
615
+ :sub_name => "",
616
+ :link => "",
617
+ #:type_metadata => nil,
618
+ :arguments => [],
619
+ :inspect => '#<OCI8::Metadata::Argument: unknown(3)>', # TODO: change to "PLS_INTEGER"
620
+ },
621
+ [1] => {
622
+ :class => OCI8::Metadata::Argument,
623
+ :obj_name => nil,
624
+ :obj_schema => nil,
625
+ :name => "TBL",
626
+ :position => 1,
627
+ #:typecode => nil,
628
+ :data_type => :named_type,
629
+ :data_size => 0,
630
+ :precision => 0,
631
+ :scale => 0,
632
+ :level => 0,
633
+ :has_default => 0,
634
+ :has_default? => false,
635
+ :iomode => :in,
636
+ :radix => 0,
637
+ :type_name => "RB_TEST_PKG",
638
+ :schema_name => @conn.username,
639
+ :sub_name => "TABLE_OF_PLS_INTEGER",
640
+ :link => "",
641
+ #:type_metadata => nil,
642
+ :arguments => ($oracle_server_version >= OCI8::ORAVER_18) ?
643
+ {
644
+ :class => Array,
645
+ :size => 0,
646
+ } : {
647
+ :class => Array,
648
+ :size => 1,
649
+ [0] => {
650
+ :class => OCI8::Metadata::Argument,
651
+ :obj_name => nil,
652
+ :obj_schema => nil,
653
+ :name => "",
654
+ :position => 1,
655
+ #:typecode => nil,
656
+ :data_type => 3,
657
+ :data_size => 0,
658
+ :precision => 0,
659
+ :scale => 0,
660
+ :level => 1,
661
+ :has_default => 0,
662
+ :has_default? => false,
663
+ :iomode => :in,
664
+ :radix => 0,
665
+ :type_name => "",
666
+ :schema_name => "",
667
+ :sub_name => "",
668
+ :link => "",
669
+ #:type_metadata => nil,
670
+ :arguments => [],
671
+ :inspect => '#<OCI8::Metadata::Argument: unknown(3)>', # TODO: change to "PLS_INTEGER"
672
+ },
673
+ },
674
+ :inspect => "#<OCI8::Metadata::Argument: TBL #{@conn.username}.RB_TEST_PKG>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.TABLE_OF_PLS_INTEGER"
675
+ },
676
+ },
677
+ :is_standalone? => false,
678
+ :inspect => '#<OCI8::Metadata::Function: SUM_TABLE_OF_PLS_INTEGER>', # FIXME
679
+ }
680
+
681
+ add_rec1_values_subprogram_attrs = {
682
+ :class => OCI8::Metadata::Function,
683
+ :obj_name => 'ADD_REC1_VALUES',
684
+ :obj_schema => nil,
685
+ :is_invoker_rights? => false,
686
+ :name => 'ADD_REC1_VALUES',
687
+ :overload_id => 0,
688
+ :arguments => {
689
+ :class => Array,
690
+ :size => 2,
691
+ [0] => {
692
+ :class => OCI8::Metadata::Argument,
693
+ :obj_name => nil,
694
+ :obj_schema => nil,
695
+ :name => "",
696
+ :position => 0,
697
+ #:typecode => nil,
698
+ :data_type => 3,
699
+ :data_size => 0,
700
+ :precision => 0,
701
+ :scale => 0,
702
+ :level => 0,
703
+ :has_default => 0,
704
+ :has_default? => false,
705
+ :iomode => :out,
706
+ :radix => 0,
707
+ :type_name => "",
708
+ :schema_name => "",
709
+ :sub_name => "",
710
+ :link => "",
711
+ #:type_metadata => nil,
712
+ :arguments => [],
713
+ :inspect => '#<OCI8::Metadata::Argument: unknown(3)>', # TODO: change to "PLS_INTEGER"
714
+ },
715
+ [1] => {
716
+ :class => OCI8::Metadata::Argument,
717
+ :obj_name => nil,
718
+ :obj_schema => nil,
719
+ :name => "TBL",
720
+ :position => 1,
721
+ #:typecode => nil,
722
+ :data_type => :named_type,
723
+ :data_size => 0,
724
+ :precision => 0,
725
+ :scale => 0,
726
+ :level => 0,
727
+ :has_default => 0,
728
+ :has_default? => false,
729
+ :iomode => :in,
730
+ :radix => 0,
731
+ :type_name => "RB_TEST_PKG",
732
+ :schema_name => @conn.username,
733
+ :sub_name => "TABLE_OF_REC1",
734
+ :link => "",
735
+ #:type_metadata => nil,
736
+ :arguments => ($oracle_server_version >= OCI8::ORAVER_18) ?
737
+ {
738
+ :class => Array,
739
+ :size => 0,
740
+ } : {
741
+ :class => Array,
742
+ :size => 1,
743
+ [0] => {
744
+ :class => OCI8::Metadata::Argument,
745
+ :obj_name => nil,
746
+ :obj_schema => nil,
747
+ :name => "",
748
+ :position => 1,
749
+ #:typecode => nil,
750
+ :data_type => 250,
751
+ :data_size => 0,
752
+ :precision => 0,
753
+ :scale => 0,
754
+ :level => 1,
755
+ :has_default => 0,
756
+ :has_default? => false,
757
+ :iomode => :in,
758
+ :radix => 0,
759
+ :type_name => "RB_TEST_PKG",
760
+ :schema_name => @conn.username,
761
+ :sub_name => "REC1",
762
+ :link => "",
763
+ #:type_metadata => nil,
764
+ :arguments => {
765
+ :class => Array,
766
+ :size => 2,
767
+ [0] => {
768
+ :class => OCI8::Metadata::Argument,
769
+ :obj_name => nil,
770
+ :obj_schema => nil,
771
+ :name => "I",
772
+ :position => 1,
773
+ #:typecode => nil,
774
+ :data_type => 3,
775
+ :data_size => 0,
776
+ :precision => 0,
777
+ :scale => 0,
778
+ :level => 2,
779
+ :has_default => 0,
780
+ :has_default? => false,
781
+ :iomode => :in,
782
+ :radix => 0,
783
+ :type_name => "",
784
+ :schema_name => "",
785
+ :sub_name => "",
786
+ :link => "",
787
+ #:type_metadata => nil,
788
+ :arguments => [],
789
+ :inspect => '#<OCI8::Metadata::Argument: I unknown(3)>', # TODO: change to "PLS_INTEGER"
790
+ },
791
+ [1] => {
792
+ :class => OCI8::Metadata::Argument,
793
+ :obj_name => nil,
794
+ :obj_schema => nil,
795
+ :name => "J",
796
+ :position => 2,
797
+ #:typecode => nil,
798
+ :data_type => :number,
799
+ :data_size => 22,
800
+ :precision => 38,
801
+ :scale => 0,
802
+ :level => 2,
803
+ :has_default => 0,
804
+ :has_default? => false,
805
+ :iomode => :in,
806
+ :radix => 10,
807
+ :type_name => "",
808
+ :schema_name => "",
809
+ :sub_name => "",
810
+ :link => "",
811
+ #:type_metadata => nil,
812
+ :arguments => [],
813
+ :inspect => '#<OCI8::Metadata::Argument: J NUMBER(38)>', # TODO: change to "INTEGER"
814
+ },
815
+ },
816
+ :inspect => '#<OCI8::Metadata::Argument: unknown(250)>', # TODO: change to "#{@conn.username}.RB_TEST_PKG.REC1"
817
+ },
818
+ },
819
+ :inspect => "#<OCI8::Metadata::Argument: TBL #{@conn.username}.RB_TEST_PKG>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.TABLE_OF_REC1"
820
+ },
821
+ },
822
+ :is_standalone? => false,
823
+ :inspect => '#<OCI8::Metadata::Function: ADD_REC1_VALUES>', # TODO: change to "#{@conn.username}.RB_TEST_PKG.ADD_REC1_VALUES"
824
+ }
825
+
826
+ out_rec1_values_subprogram_attrs = {
827
+ :class => OCI8::Metadata::Procedure,
828
+ :obj_name => 'OUT_REC1_VALUES',
829
+ :obj_schema => nil,
830
+ :is_invoker_rights? => false,
831
+ :name => 'OUT_REC1_VALUES',
832
+ :overload_id => 0,
833
+ :arguments => {
834
+ :class => Array,
835
+ :size => 1,
836
+ [0] => {
837
+ :class => OCI8::Metadata::Argument,
838
+ :obj_name => nil,
839
+ :obj_schema => nil,
840
+ :name => "TBL",
841
+ :position => 1,
842
+ #:typecode => nil,
843
+ :data_type => :named_type,
844
+ :data_size => 0,
845
+ :precision => 0,
846
+ :scale => 0,
847
+ :level => 0,
848
+ :has_default => 0,
849
+ :has_default? => false,
850
+ :iomode => :out,
851
+ :radix => 0,
852
+ :type_name => "RB_TEST_PKG",
853
+ :schema_name => @conn.username,
854
+ :sub_name => "TABLE_OF_REC1",
855
+ :link => "",
856
+ #:type_metadata => nil,
857
+ :arguments => ($oracle_server_version >= OCI8::ORAVER_18) ?
858
+ {
859
+ :class => Array,
860
+ :size => 0,
861
+ } : {
862
+ :class => Array,
863
+ :size => 1,
864
+ [0] => {
865
+ :class => OCI8::Metadata::Argument,
866
+ :obj_name => nil,
867
+ :obj_schema => nil,
868
+ :name => "",
869
+ :position => 1,
870
+ #:typecode => nil,
871
+ :data_type => 250,
872
+ :data_size => 0,
873
+ :precision => 0,
874
+ :scale => 0,
875
+ :level => 1,
876
+ :has_default => 0,
877
+ :has_default? => false,
878
+ :iomode => :out,
879
+ :radix => 0,
880
+ :type_name => "RB_TEST_PKG",
881
+ :schema_name => @conn.username,
882
+ :sub_name => "REC1",
883
+ :link => "",
884
+ #:type_metadata => nil,
885
+ :arguments => {
886
+ :class => Array,
887
+ :size => 2,
888
+ [0] => {
889
+ :class => OCI8::Metadata::Argument,
890
+ :obj_name => nil,
891
+ :obj_schema => nil,
892
+ :name => "I",
893
+ :position => 1,
894
+ #:typecode => nil,
895
+ :data_type => 3,
896
+ :data_size => 0,
897
+ :precision => 0,
898
+ :scale => 0,
899
+ :level => 2,
900
+ :has_default => 0,
901
+ :has_default? => false,
902
+ :iomode => :out,
903
+ :radix => 0,
904
+ :type_name => "",
905
+ :schema_name => "",
906
+ :sub_name => "",
907
+ :link => "",
908
+ #:type_metadata => nil,
909
+ :arguments => [],
910
+ :inspect => '#<OCI8::Metadata::Argument: I unknown(3)>', # TODO: change to "PLS_INTEGER"
911
+ },
912
+ [1] => {
913
+ :class => OCI8::Metadata::Argument,
914
+ :obj_name => nil,
915
+ :obj_schema => nil,
916
+ :name => "J",
917
+ :position => 2,
918
+ #:typecode => nil,
919
+ :data_type => :number,
920
+ :data_size => 22,
921
+ :precision => 38,
922
+ :scale => 0,
923
+ :level => 2,
924
+ :has_default => 0,
925
+ :has_default? => false,
926
+ :iomode => :out,
927
+ :radix => 10,
928
+ :type_name => "",
929
+ :schema_name => "",
930
+ :sub_name => "",
931
+ :link => "",
932
+ #:type_metadata => nil,
933
+ :arguments => [],
934
+ :inspect => '#<OCI8::Metadata::Argument: J NUMBER(38)>', # TODO: change to "INTEGER"
935
+ },
936
+ },
937
+ :inspect => '#<OCI8::Metadata::Argument: unknown(250)>', # TODO: change to "#{@conn.username}.RB_TEST_PKG.REC1"
938
+ },
939
+ },
940
+ :inspect => "#<OCI8::Metadata::Argument: TBL #{@conn.username}.RB_TEST_PKG>", # TODO: change to "#{@conn.username}.RB_TEST_PKG.TABLE_OF_REC1"
941
+ },
942
+ },
943
+ :is_standalone? => false,
944
+ :inspect => '#<OCI8::Metadata::Procedure: OUT_REC1_VALUES>', # TODO: change to "#{@conn.username}.RB_TEST_PKG.OUT_REC1_VALUES"
945
+ }
946
+
947
+ subprogram_metadata_attrs = {
948
+ 'SUM_TABLE_OF_PLS_INTEGER' => sum_table_of_pls_integer_subprogram_attrs,
949
+ 'ADD_REC1_VALUES' => add_rec1_values_subprogram_attrs,
950
+ 'OUT_REC1_VALUES' => out_rec1_values_subprogram_attrs,
951
+ }
952
+
953
+ pkg_metadata = @conn.describe_package('rb_test_pkg')
954
+
955
+ assert_kind_of(OCI8::Metadata::Package, pkg_metadata)
956
+ assert_equal(false, pkg_metadata.is_invoker_rights?)
957
+ type_metadata = pkg_metadata.types
958
+ assert_kind_of(Array, type_metadata)
959
+ assert_equal(8, type_metadata.size)
960
+ type_metadata.each do |md|
961
+ attrs = type_metadata_attrs[md.name]
962
+ if attrs
963
+ check_attributes(md.name, md, attrs)
964
+ else
965
+ raise "unknown type name #{md.name}"
966
+ end
967
+ end
968
+
969
+ subprogram_metadata = pkg_metadata.subprograms
970
+ assert_kind_of(Array, subprogram_metadata)
971
+ assert_equal(3, subprogram_metadata.size)
972
+ subprogram_metadata.each do |md|
973
+ attrs = subprogram_metadata_attrs[md.name]
974
+ if attrs
975
+ check_attributes(md.name, md, attrs)
976
+ else
977
+ raise "unknown subprogram name #{md.name}"
978
+ end
979
+ end
980
+ end
981
+ end