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
data/test/README.md ADDED
@@ -0,0 +1,37 @@
1
+ Before running unit test:
2
+
3
+ 1. Connect to Oracle as sys
4
+ ```shell
5
+ $ sqlplus sys/<password_of_sys> as sysdba
6
+ SQL>
7
+ ```
8
+ 2. Create user ruby
9
+ ```sql
10
+ SQL> CREATE USER ruby IDENTIFIED BY oci8 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
11
+ SQL> alter user ruby quota unlimited on users;
12
+ ```
13
+ 3. Grant the privilege to connect and execute.
14
+ ```sql
15
+ SQL> GRANT connect, resource, create view, create synonym TO ruby;
16
+ SQL> GRANT execute ON dbms_lock TO ruby;
17
+ ```
18
+ 4. Connect as ruby user.
19
+ ```shell
20
+ $ sqlplus ruby/oci8
21
+ SQL>
22
+ ```
23
+ 5. Create object types
24
+ ```sql
25
+ SQL> @test/setup_test_object.sql
26
+ SQL> @test/setup_test_package.sql
27
+ ```
28
+ 6. change $dbname in test/config.rb.
29
+
30
+ Then run the following command:
31
+ ```shell
32
+ $ make check
33
+ ```
34
+ or
35
+ ```
36
+ $ nmake check (If your compiler is MS Visual C++.)
37
+ ````
data/test/config.rb ADDED
@@ -0,0 +1,201 @@
1
+ # $dbuser must have permission to run DBMS_LOCK.SLEEP
2
+ # connect as sys
3
+ # GRANT EXECUTE ON dbms_lock TO ruby;
4
+ $dbuser = "ruby"
5
+ $dbpass = "oci8"
6
+ $dbname = nil
7
+
8
+ # for test_bind_string_as_nchar in test_encoding.rb
9
+ ENV['ORA_NCHAR_LITERAL_REPLACE'] = 'TRUE' if OCI8.client_charset_name.include? 'UTF8'
10
+
11
+ # test_clob.rb
12
+
13
+ nls_lang = ENV['NLS_LANG']
14
+ nls_lang = nls_lang.split('.')[1] unless nls_lang.nil?
15
+ nls_lang = nls_lang.upcase unless nls_lang.nil?
16
+ $lobfile = File.dirname(__FILE__) + '/../setup.rb'
17
+ $lobreadnum = 256 # counts in charactors
18
+
19
+ # don't modify below.
20
+
21
+ begin
22
+ require 'minitest/autorun'
23
+ Minitest = MiniTest unless defined? Minitest
24
+ Minitest::Test = Minitest::Unit::TestCase unless defined? Minitest::Test
25
+ rescue LoadError
26
+ require 'test/unit'
27
+ module Minitest
28
+ Test = ::Test::Unit::TestCase
29
+ Assertions = ::Test::Unit::Assertions
30
+ module Assertions
31
+ alias refute_nil assert_not_nil
32
+ end
33
+ end
34
+ end
35
+
36
+ # $oracle_server_version: database compatible level of the Oracle server.
37
+ # $oracle_client_version: Oracle client library version for which oci8 is compiled.
38
+ # $oracle_version: lower value of $oracle_server_version and $oracle_client_version.
39
+ conn = OCI8.new($dbuser, $dbpass, $dbname)
40
+ begin
41
+ conn.exec('select value from database_compatible_level') do |row|
42
+ $oracle_server_version = OCI8::OracleVersion.new(row[0])
43
+ end
44
+ rescue OCIError
45
+ raise if $!.code != 942 # ORA-00942: table or view does not exist
46
+ $oracle_server_version = OCI8::ORAVER_8_0
47
+ end
48
+ conn.logoff
49
+
50
+ if $oracle_server_version < OCI8.oracle_client_version
51
+ $oracle_version = $oracle_server_version
52
+ else
53
+ $oracle_version = OCI8.oracle_client_version
54
+ end
55
+
56
+ if $oracle_version < OCI8::ORAVER_8_1
57
+ $test_clob = false
58
+ else
59
+ $test_clob = true
60
+ end
61
+
62
+ begin
63
+ Time.new(2001, 1, 1, 0, 0, 0, '+00:00')
64
+ # ruby 1.9.2 or later
65
+ def convert_to_time(year, month, day, hour, minute, sec, subsec, timezone)
66
+ subsec ||= 0
67
+ if timezone
68
+ # with time zone
69
+ Time.new(year, month, day, hour, minute, sec + subsec, timezone)
70
+ else
71
+ # without time zone
72
+ Time.local(year, month, day, hour, minute, sec, subsec * 1000000)
73
+ end
74
+ end
75
+ rescue
76
+ # ruby 1.9.1 or former
77
+ def convert_to_time(year, month, day, hour, minute, sec, subsec, timezone)
78
+ subsec ||= 0
79
+ if timezone
80
+ # with time zone
81
+ /([+-])(\d+):(\d+)/ =~ timezone
82
+ offset = ($1 + '1').to_i * ($2.to_i * 60 + $3.to_i)
83
+ if offset == 0
84
+ Time.utc(year, month, day, hour, minute, sec, subsec * 1000000)
85
+ else
86
+ tm = Time.local(year, month, day, hour, minute, sec, subsec * 1000000)
87
+ raise "Failed to convert #{str} to Time" if tm.utc_offset != offset * 60
88
+ tm
89
+ end
90
+ else
91
+ # without time zone
92
+ Time.local(year, month, day, hour, minute, sec, subsec * 1000000)
93
+ end
94
+ end
95
+ end
96
+
97
+ def convert_to_datetime(year, month, day, hour, minute, sec, subsec, timezone)
98
+ subsec ||= 0
99
+ utc_offset = if timezone
100
+ # with time zone
101
+ /([+-])(\d+):(\d+)/ =~ timezone
102
+ ($1 + '1').to_i * ($2.to_i * 60 + $3.to_i) * 60
103
+ else
104
+ Time.local(year, month, day, hour, minute, sec).utc_offset
105
+ end
106
+ begin
107
+ DateTime.civil(year, month, day, hour, minute, sec + subsec, utc_offset.to_r / 86400)
108
+ rescue ArgumentError
109
+ raise $! if $!.to_s != 'invalid date'
110
+ # for ruby 1.8.6.
111
+ # convert to a DateTime via a String as a workaround.
112
+ if utc_offset >= 0
113
+ sign = ?+
114
+ else
115
+ sign = ?-
116
+ utc_offset = - utc_offset;
117
+ end
118
+ tz_min = utc_offset / 60
119
+ tz_hour, tz_min = tz_min.divmod 60
120
+ time_str = format("%04d-%02d-%02dT%02d:%02d:%02d.%09d%c%02d:%02d",
121
+ year, month, day, hour, minute, sec, (subsec * 1000_000_000).to_i, sign, tz_hour, tz_min)
122
+ ::DateTime.parse(time_str)
123
+ end
124
+ end
125
+
126
+ class Minitest::Test
127
+
128
+ # @!visibility private
129
+ # dirty hack to suppress "warning: constant ::Fixnum is deprecated"
130
+ Fixnum = (0.class == ::Integer) ? ::Integer : ::Fixnum
131
+ # @!visibility private
132
+ # dirty hack to suppress "warning: constant ::Bignum is deprecated"
133
+ Bignum = (0.class == ::Integer) ? ::Integer : ::Bignum
134
+
135
+ def get_oci8_connection()
136
+ OCI8.new($dbuser, $dbpass, $dbname)
137
+ rescue OCIError
138
+ raise if $!.code != 12516 && $!.code != 12520
139
+ # sleep a few second and try again if
140
+ # the error code is ORA-12516 or ORA-12520.
141
+ #
142
+ # ORA-12516 - TNS:listener could not find available handler with
143
+ # matching protocol stack
144
+ # ORA-12520 - TNS:listener could not find available handler for
145
+ # requested type of server
146
+ #
147
+ # Thanks to Christopher Jones.
148
+ #
149
+ # Ref: The Underground PHP and Oracle Manual (page 175 in vesion 1.4)
150
+ # http://www.oracle.com/technology/tech/php/pdf/underground-php-oracle-manual.pdf
151
+ #
152
+ sleep(5)
153
+ OCI8.new($dbuser, $dbpass, $dbname)
154
+ end
155
+
156
+ def get_dbi_connection()
157
+ DBI.connect("dbi:OCI8:#{$dbname}", $dbuser, $dbpass, 'AutoCommit' => false)
158
+ rescue DBI::DatabaseError
159
+ raise if $!.err != 12516 && $!.err != 12520
160
+ # same as get_oci8_connection()
161
+ sleep(5)
162
+ DBI.connect("dbi:OCI8:#{$dbname}", $dbuser, $dbpass, 'AutoCommit' => false)
163
+ end
164
+
165
+ def drop_table(table_name)
166
+ if $oracle_server_version < OCI8::ORAVER_10_1
167
+ # Oracle 8 - 9i
168
+ sql = "DROP TABLE #{table_name}"
169
+ else
170
+ # Oracle 10g -
171
+ sql = "DROP TABLE #{table_name} PURGE"
172
+ end
173
+
174
+ if defined? @conn
175
+ begin
176
+ @conn.exec(sql)
177
+ rescue OCIError
178
+ raise if $!.code != 942 # table or view does not exist
179
+ end
180
+ elsif instance_variable_get(:@dbh)
181
+ begin
182
+ @dbh.do(sql)
183
+ rescue DBI::DatabaseError
184
+ raise if $!.err != 942 # table or view does not exist
185
+ end
186
+ end
187
+ end # drop_table
188
+
189
+ def drop_type(type_name)
190
+ begin
191
+ @conn.exec("DROP TYPE BODY #{type_name}")
192
+ rescue OCIError
193
+ raise if $!.code != 4043
194
+ end
195
+ begin
196
+ @conn.exec("DROP TYPE #{type_name}")
197
+ rescue OCIError
198
+ raise if $!.code != 4043
199
+ end
200
+ end # drop_type
201
+ end
@@ -0,0 +1,199 @@
1
+ drop table rb_test_obj_tab1 purge
2
+ /
3
+ drop table rb_test_obj_tab2 purge
4
+ /
5
+ drop type rb_test_obj
6
+ /
7
+ drop type rb_test_obj_elem_ary_of_ary
8
+ /
9
+ drop type rb_test_obj_elem_array
10
+ /
11
+ drop type rb_test_obj_elem
12
+ /
13
+ drop type rb_test_obj_sub
14
+ /
15
+ drop type rb_test_obj_base
16
+ /
17
+ create type rb_test_obj_elem as object (
18
+ x integer,
19
+ y integer
20
+ )
21
+ /
22
+ create or replace type rb_test_int_array as array(50) of integer
23
+ /
24
+ create or replace type rb_test_flt_array as array(50) of float
25
+ /
26
+ create or replace type rb_test_num_array as array(50) of number(10,1)
27
+ /
28
+ create or replace type rb_test_bdbl_array as array(50) of binary_double
29
+ /
30
+ create or replace type rb_test_bflt_array as array(50) of binary_float
31
+ /
32
+ create or replace type rb_test_str_array as array(50) of varchar2(50)
33
+ /
34
+ create or replace type rb_test_raw_array as array(50) of raw(50)
35
+ /
36
+ create or replace type rb_test_obj_elem_array as array(50) of rb_test_obj_elem
37
+ /
38
+ create or replace type rb_test_obj_elem_ary_of_ary as array(50) of rb_test_obj_elem_array
39
+ /
40
+ --create or replace type rb_test_date_array as array(50) of date
41
+ --/
42
+ create type rb_test_obj as object (
43
+ int_val integer,
44
+ flt_val float,
45
+ num_val number(10,1),
46
+ bdbl_val binary_double,
47
+ bflt_val binary_float,
48
+ str_val varchar2(50),
49
+ raw_val raw(50),
50
+ clob_val clob,
51
+ nclob_val nclob,
52
+ blob_val blob,
53
+ obj_val rb_test_obj_elem,
54
+ int_array_val rb_test_int_array,
55
+ flt_array_val rb_test_flt_array,
56
+ num_array_val rb_test_num_array,
57
+ bdbl_array_val rb_test_bdbl_array,
58
+ bflt_array_val rb_test_bflt_array,
59
+ str_array_val rb_test_str_array,
60
+ raw_array_val rb_test_raw_array,
61
+ obj_array_val rb_test_obj_elem_array,
62
+ obj_ary_of_ary_val rb_test_obj_elem_ary_of_ary,
63
+ date_val date,
64
+ timestamp_val timestamp(9),
65
+ timestamp_tz_val timestamp(9) with time zone,
66
+ -- date_array_val rb_test_date_array,
67
+
68
+ constructor function rb_test_obj(n number) return self as result,
69
+ static function test_object_version return integer,
70
+ static function class_func(n number) return rb_test_obj,
71
+ static procedure class_proc1(obj out rb_test_obj, n number),
72
+ static procedure class_proc2(obj in out rb_test_obj),
73
+ member function member_func return integer,
74
+ member procedure member_proc(n in integer)
75
+ )
76
+ /
77
+ create type body rb_test_obj is
78
+ constructor function rb_test_obj(n number) return self as result is
79
+ str varchar(28);
80
+ ts timestamp(9);
81
+ ts_tz timestamp(9) with time zone;
82
+ begin
83
+ str := to_char(1990 + n, 'FM0000') ||
84
+ to_char(mod(round(n) * 5, 12) + 1, 'FM00') ||
85
+ to_char(mod(round(n) * 7, 27) + 1, 'FM00') ||
86
+ to_char(mod(round(n) * 9, 24), 'FM00') ||
87
+ to_char(mod(round(n) * 11, 60), 'FM00') ||
88
+ to_char(mod(round(n) * 13, 60), 'FM00') ||
89
+ to_char(mod(round(n) * 333333333, 1000000000), 'FM000000000');
90
+ ts := to_timestamp(str, 'yyyymmddhh24missff9');
91
+ str := str || to_char(mod(round(n) * 15, 24) - 11, 'FMS00') ||
92
+ to_char(mod(round(n) * 17, 60), 'FM00');
93
+ ts_tz := to_timestamp_tz(str, 'yyyymmddhh24missff9tzhtzm');
94
+ self.int_val := n;
95
+ self.flt_val := n;
96
+ self.num_val := n;
97
+ self.bdbl_val := n;
98
+ self.bflt_val := n;
99
+ self.str_val := to_char(n);
100
+ self.raw_val := utl_raw.cast_to_raw(to_char(n));
101
+ self.clob_val := to_clob(n);
102
+ self.nclob_val := to_clob(n);
103
+ self.blob_val := to_blob(utl_raw.cast_to_raw(to_char(n)));
104
+ self.obj_val := rb_test_obj_elem(n, n + 1);
105
+ self.date_val := ts;
106
+ self.timestamp_val := ts;
107
+ self.timestamp_tz_val := ts_tz;
108
+ if self.int_val != 1 then
109
+ self.int_array_val := rb_test_int_array(n, n + 1, n + 2);
110
+ self.flt_array_val := rb_test_flt_array(n, n + 1, n + 2);
111
+ self.num_array_val := rb_test_num_array(n, n + 1, n + 2);
112
+ self.bdbl_array_val := rb_test_bdbl_array(n, n + 1, n + 2);
113
+ self.bflt_array_val := rb_test_bflt_array(n, n + 1, n + 2);
114
+ self.str_array_val := rb_test_str_array(to_char(n), to_char(n + 1), to_char(n + 2));
115
+ self.raw_array_val := rb_test_raw_array(utl_raw.cast_to_raw(to_char(n)),
116
+ utl_raw.cast_to_raw(to_char(n + 1)),
117
+ utl_raw.cast_to_raw(to_char(n + 2)));
118
+ self.obj_array_val := rb_test_obj_elem_array(rb_test_obj_elem(n + 0, n + 1),
119
+ rb_test_obj_elem(n + 1, n + 2),
120
+ rb_test_obj_elem(n + 2, n + 3));
121
+ self.obj_ary_of_ary_val := rb_test_obj_elem_ary_of_ary(self.obj_array_val);
122
+ -- self.date_array_val := rb_test_date_array(to_test_date(n),
123
+ -- to_test_date(n + 1),
124
+ -- to_test_date(n + 2));
125
+ end if;
126
+ return;
127
+ end;
128
+
129
+ static function test_object_version return integer is
130
+ begin
131
+ return 4;
132
+ end;
133
+
134
+ static function class_func(n number) return rb_test_obj is
135
+ begin
136
+ return rb_test_obj(n);
137
+ end;
138
+
139
+ static procedure class_proc1(obj out rb_test_obj, n number) is
140
+ begin
141
+ obj := rb_test_obj(n);
142
+ end;
143
+
144
+ static procedure class_proc2(obj in out rb_test_obj) is
145
+ begin
146
+ obj.int_val := obj.int_val + 1;
147
+ end;
148
+
149
+ member function member_func return integer is
150
+ begin
151
+ return int_val;
152
+ end;
153
+
154
+ member procedure member_proc(n in integer) is
155
+ begin
156
+ self.int_val := n;
157
+ end;
158
+ end;
159
+ /
160
+ create table rb_test_obj_tab1 (
161
+ n number primary key,
162
+ obj rb_test_obj
163
+ )
164
+ /
165
+ create table rb_test_obj_tab2 of rb_test_obj (
166
+ int_val primary key
167
+ )
168
+ /
169
+ declare
170
+ n number := 0;
171
+ obj rb_test_obj;
172
+ begin
173
+ loop
174
+ n := n + 1.2;
175
+ exit when n > 20;
176
+ obj := rb_test_obj(n);
177
+ insert into rb_test_obj_tab1 values (n, obj);
178
+ insert into rb_test_obj_tab2 values (obj);
179
+ end loop;
180
+ end;
181
+ /
182
+
183
+ create type rb_test_obj_base as object (
184
+ id varchar2(30)
185
+ ) not final
186
+ /
187
+ create type rb_test_obj_sub under rb_test_obj_base (
188
+ subid varchar2(30)
189
+ ) final
190
+ /
191
+ create or replace function rb_test_obj_get_object(get_base integer) return rb_test_obj_base is
192
+ begin
193
+ if get_base = 0 then
194
+ return rb_test_obj_base('base');
195
+ else
196
+ return rb_test_obj_sub('sub', 'subid');
197
+ end if;
198
+ end;
199
+ /
@@ -0,0 +1,59 @@
1
+ create or replace package rb_test_pkg is
2
+ package_version pls_integer := 1;
3
+
4
+ type array_of_integer is array(50) of integer;
5
+ type table_of_pls_integer is table of pls_integer;
6
+ type table_of_boolean is table of boolean;
7
+ type indexed_table_of_varchar2 is table of varchar2(10) index by varchar2(5);
8
+ type rec1 is record (i pls_integer, j integer);
9
+ type rec2 is record (b boolean, it indexed_table_of_varchar2, rec rec1);
10
+ type table_of_rec1 is table of rec1;
11
+ type table_of_rec2 is table of rec2;
12
+
13
+ function sum_table_of_pls_integer(tbl in table_of_pls_integer) return pls_integer;
14
+ function add_rec1_values(tbl in table_of_rec1) return pls_integer;
15
+ procedure out_rec1_values(tbl out table_of_rec1);
16
+ end;
17
+ /
18
+ create or replace package body rb_test_pkg is
19
+ function sum_table_of_pls_integer(tbl in table_of_pls_integer) return pls_integer is
20
+ i pls_integer;
21
+ ret pls_integer := 0;
22
+ begin
23
+ for i in tbl.first..tbl.last loop
24
+ ret := ret + tbl(i);
25
+ end loop;
26
+ return ret;
27
+ end;
28
+
29
+ function add_rec1_values(tbl in table_of_rec1) return pls_integer is
30
+ i pls_integer;
31
+ ret pls_integer := 0;
32
+ begin
33
+ for i in tbl.first..tbl.last loop
34
+ ret := ret + nvl(tbl(i).i, 0) + nvl(tbl(i).j, 0);
35
+ end loop;
36
+ return ret;
37
+ end;
38
+
39
+ procedure out_rec1_values(tbl out table_of_rec1) is
40
+ i pls_integer;
41
+ rec1val rec1;
42
+ begin
43
+ tbl := table_of_rec1();
44
+ for i in 1..20 loop
45
+ tbl.extend;
46
+ if i mod 6 != 0 then
47
+ if i mod 3 != 0 then
48
+ rec1val.i := i;
49
+ rec1val.j := i;
50
+ else
51
+ rec1val.i := null;
52
+ rec1val.j := null;
53
+ end if;
54
+ tbl(i) := rec1val;
55
+ end if;
56
+ end loop;
57
+ end;
58
+ end;
59
+ /
data/test/test_all.rb ADDED
@@ -0,0 +1,56 @@
1
+ srcdir = File.dirname(__FILE__)
2
+
3
+ require 'oci8'
4
+ require "#{srcdir}/config"
5
+
6
+ require "#{srcdir}/test_oradate"
7
+ require "#{srcdir}/test_oranumber"
8
+ require "#{srcdir}/test_bind_array.rb"
9
+ require "#{srcdir}/test_bind_string"
10
+ require "#{srcdir}/test_bind_time"
11
+ require "#{srcdir}/test_bind_raw"
12
+ require "#{srcdir}/test_bind_integer"
13
+ if $test_clob
14
+ require "#{srcdir}/test_clob"
15
+ end
16
+
17
+ require "#{srcdir}/test_break"
18
+ require "#{srcdir}/test_oci8"
19
+ require "#{srcdir}/test_datetime"
20
+ require "#{srcdir}/test_connstr"
21
+ require "#{srcdir}/test_metadata"
22
+ require "#{srcdir}/test_array_dml"
23
+ require "#{srcdir}/test_rowid"
24
+ require "#{srcdir}/test_appinfo"
25
+ require "#{srcdir}/test_oracle_version"
26
+ require "#{srcdir}/test_error"
27
+ require "#{srcdir}/test_connection_pool"
28
+ require "#{srcdir}/test_object"
29
+ require "#{srcdir}/test_properties.rb"
30
+
31
+ if OCI8.respond_to? :encoding
32
+ require "#{srcdir}/test_encoding"
33
+ end
34
+
35
+ if $oracle_version >= OCI8::ORAVER_12_1
36
+ require "#{srcdir}/test_package_type"
37
+ require "#{srcdir}/test_bind_boolean.rb"
38
+ end
39
+
40
+ # Ruby/DBI
41
+ begin
42
+ require 'dbi'
43
+ rescue LoadError
44
+ begin
45
+ require 'rubygems'
46
+ require 'dbi'
47
+ rescue LoadError
48
+ dbi_not_found = true
49
+ end
50
+ end
51
+ unless dbi_not_found
52
+ require "#{srcdir}/test_dbi"
53
+ if $test_clob
54
+ require "#{srcdir}/test_dbi_clob"
55
+ end
56
+ end
@@ -0,0 +1,62 @@
1
+ require 'oci8'
2
+ require File.dirname(__FILE__) + '/config'
3
+
4
+ class TestAppInfo < Minitest::Test
5
+
6
+ def setup
7
+ @conn = get_oci8_connection
8
+ end
9
+
10
+ def test_set_client_identifier
11
+ # set client_id
12
+ client_id = "ruby-oci8:#{Process.pid()}"
13
+ @conn.client_identifier = client_id
14
+ assert_equal(client_id, @conn.select_one("SELECT SYS_CONTEXT('USERENV', 'CLIENT_IDENTIFIER') FROM DUAL")[0]);
15
+ # check the first character
16
+ assert_raises ArgumentError do
17
+ @conn.client_identifier = ':bad_identifier'
18
+ end
19
+
20
+ # clear client_id
21
+ @conn.client_identifier = nil
22
+ assert_nil(@conn.select_one("SELECT SYS_CONTEXT('USERENV', 'CLIENT_IDENTIFIER') FROM DUAL")[0]);
23
+ end
24
+
25
+ def test_set_module
26
+ # FIXME: check again after upgrading Oracle 9.2 to 9.2.0.4.
27
+ return if @conn.oracle_server_version < OCI8::ORAVER_10_1
28
+
29
+ # set module
30
+ @conn.module = 'ruby-oci8'
31
+ assert_equal('ruby-oci8', @conn.select_one("SELECT SYS_CONTEXT('USERENV', 'MODULE') FROM DUAL")[0]);
32
+ # clear module
33
+ @conn.module = nil
34
+ assert_nil(@conn.select_one("SELECT SYS_CONTEXT('USERENV', 'MODULE') FROM DUAL")[0]);
35
+ end
36
+
37
+ def test_set_action
38
+ # FIXME: check again after upgrading Oracle 9.2 to 9.2.0.4.
39
+ return if @conn.oracle_server_version < OCI8::ORAVER_10_1
40
+
41
+ # set action
42
+ @conn.action = 'test_set_action'
43
+ assert_equal('test_set_action', @conn.select_one("SELECT SYS_CONTEXT('USERENV', 'ACTION') FROM DUAL")[0]);
44
+ # clear action
45
+ @conn.action = nil
46
+ assert_nil(@conn.select_one("SELECT SYS_CONTEXT('USERENV', 'ACTION') FROM DUAL")[0]);
47
+ end
48
+
49
+ def test_set_client_info
50
+ # set client_info
51
+ client_info = "ruby-oci8:#{Process.pid()}"
52
+ @conn.client_info = client_info
53
+ assert_equal(client_info, @conn.select_one("SELECT SYS_CONTEXT('USERENV', 'CLIENT_INFO') FROM DUAL")[0]);
54
+ # clear client_info
55
+ @conn.client_info = nil
56
+ assert_nil(@conn.select_one("SELECT SYS_CONTEXT('USERENV', 'CLIENT_INFO') FROM DUAL")[0]);
57
+ end
58
+
59
+ def teardown
60
+ @conn.logoff
61
+ end
62
+ end