ruby-oci8-master 2.0.7

Sign up to get free protection for your applications and to get access to all the features.
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,88 @@
1
+ VERSION = `cat VERSION`
2
+ RUBY = ruby -w
3
+ RDOC = rdoc
4
+
5
+ all: build
6
+
7
+ config.save: lib/oci8.rb.in
8
+ $(RUBY) setup.rb config
9
+
10
+ build: config.save
11
+ $(RUBY) setup.rb setup
12
+
13
+ check: build
14
+ $(RUBY) setup.rb test
15
+
16
+ clean:
17
+ $(RUBY) setup.rb clean
18
+
19
+ distclean:
20
+ $(RUBY) setup.rb distclean
21
+
22
+ install:
23
+ $(RUBY) setup.rb install
24
+
25
+ site-install:
26
+ $(RUBY) setup.rb install
27
+
28
+ format_c_source:
29
+ astyle --options=none --style=linux --indent=spaces=4 --brackets=linux --suffix=none ext/oci8/*.[ch]
30
+
31
+ # internal use only
32
+ .PHONY: rdoc run-rdoc
33
+
34
+ rdoc:
35
+ TZ= $(RDOC) -o rdoc -c us-ascii --threads=1 -W http://ruby-oci8.rubyforge.org/svn/trunk/ruby-oci8/ ext/oci8 lib
36
+
37
+ dist:
38
+ -rm -rf ruby-oci8-$(VERSION)
39
+ mkdir ruby-oci8-$(VERSION)
40
+ tar cf - `cat dist-files` | (cd ruby-oci8-$(VERSION); tar xf - )
41
+ tar cfz ruby-oci8-$(VERSION).tar.gz ruby-oci8-$(VERSION)
42
+
43
+ dist-check: dist
44
+ cd ruby-oci8-$(VERSION) && $(MAKE) RUBY="$(RUBY)"
45
+ cd ruby-oci8-$(VERSION) && $(MAKE) RUBY="$(RUBY)" check
46
+ cd ruby-oci8-$(VERSION)/src && $(MAKE) RUBY="$(RUBY)" sitearchdir=../work sitelibdir=../work site-install
47
+ cd ruby-oci8-$(VERSION)/test && $(RUBY) -I../work -I../support test_all.rb
48
+
49
+ #
50
+ # for Windows
51
+ #
52
+ RUBY_18 = c:\ruby
53
+ RUBY_191 = c:\ruby-1.9.1
54
+ GEMPKG = ruby-oci8-2.0.3-x86-mswin32-60.gem
55
+
56
+ ext\oci8\oci8lib_18.so:
57
+ $(RUBY_18)\bin\ruby -r fileutils -e "FileUtils.rm_rf('ruby18')"
58
+ md ruby18
59
+ cd ruby18
60
+ $(RUBY_18)\bin\ruby ..\setup.rb config -- --with-runtime-check
61
+ $(RUBY_18)\bin\ruby ..\setup.rb setup
62
+ rem $(RUBY_18)\bin\ruby ..\setup.rb test
63
+ cd ..
64
+ copy ruby18\ext\oci8\oci8lib_18.so ext\oci8\oci8lib_18.so
65
+
66
+ ext\oci8\oci8lib_191.so:
67
+ $(RUBY_191)\bin\ruby -r fileutils -e "FileUtils.rm_rf('ruby191')"
68
+ md ruby191
69
+ cd ruby191
70
+ $(RUBY_191)\bin\ruby ..\setup.rb config -- --with-runtime-check
71
+ $(RUBY_191)\bin\ruby ..\setup.rb setup
72
+ rem $(RUBY_191)\bin\ruby ..\setup.rb test
73
+ cd ..
74
+ copy ruby191\ext\oci8\oci8lib_191.so ext\oci8\oci8lib_191.so
75
+ copy ruby191\lib\oci8.rb lib\oci8.rb
76
+
77
+ $(GEMPKG): ext\oci8\oci8lib_18.so ext\oci8\oci8lib_191.so ruby-oci8.gemspec
78
+ $(RUBY_191)\bin\gem build ruby-oci8.gemspec -- current
79
+
80
+ test-win32-ruby18: $(GEMPKG)
81
+ $(RUBY_18)\bin\gem install $(GEMPKG) --no-rdoc --no-ri --local
82
+ $(RUBY_18)\bin\ruby -rubygems test\test_all.rb
83
+
84
+ test-win32-ruby191: $(GEMPKG)
85
+ $(RUBY_191)\bin\gem install $(GEMPKG) --no-rdoc --no-ri --local
86
+ $(RUBY_191)\bin\ruby test\test_all.rb
87
+
88
+ test-win32: test-win32-ruby18 test-win32-ruby191
data/NEWS ADDED
@@ -0,0 +1,303 @@
1
+ 2.0.6:
2
+
3
+ * Fixed issues
4
+
5
+ - fix SEGV when freeing a temporary LOB during GC on rubinius 1.2.3.
6
+
7
+ - revert the exception type from RuntimeError to OCIException when
8
+ a closed OCI handle's method is called. It was chaned in 2.0.5
9
+ by mistake.
10
+
11
+ 2.0.5:
12
+
13
+ * New Features
14
+
15
+ - Support Rubinius.
16
+
17
+ - OraNumber#has_decimal_part? -> boolean
18
+
19
+ OraNumber(10).has_decimal_part? # => false
20
+ OraNumber(10.1).has_decimal_part? # => true
21
+
22
+ - Limitted support for OraNumber's positive and negative infinity.
23
+
24
+ They are converted to '~' and '-~' respectively as described in
25
+ <URL:http://www.ixora.com.au/notes/infinity.htm>.
26
+
27
+ - OCI8.properties is added to control ruby-oci8 behaviour.
28
+ It supports :bind_string_as_nchar only for now.
29
+
30
+ - OCI8.properties[:bind_string_as_nchar] is added.
31
+
32
+ You need to set "OCI8.properties[:bind_string_as_nchar] = true"
33
+ if the database character set is not UTF-8 and NCHAR/NVARCHAR2 columns
34
+ contain characters which cannot be converted to the database character set.
35
+ See: http://rubyforge.org/forum/forum.php?thread_id=48838&forum_id=1078
36
+
37
+ * Fixed issues
38
+
39
+ - Fix InvalidHandle errors on Rails.
40
+ (reported by Jordan Curzon and Aaron Qian)
41
+ See: http://rubyforge.org/forum/forum.php?thread_id=49751&forum_id=1078
42
+
43
+ - Raise "OCIError: ORA-01805: possible error in date/time operation"
44
+ when Oracle 11gR2's client and server timezone versions are not same
45
+ instead of raising a exception "undefined method `*' for nil:NilClass."
46
+ See: http://rubyforge.org/forum/forum.php?thread_id=49102&forum_id=1078
47
+
48
+ - Fix unexpectedly disconnect when failed-logon connections is GC'ed
49
+ and the connection object's address is accidentally same with
50
+ an alive connection.
51
+
52
+ - Fix segmentation fault when calling OCI8::Cursor#[] for
53
+ closed statement object's (reported by Hugo L. Borges)
54
+
55
+ - Fix a bug that a string is bound to RAW.
56
+ Its encoding had been convertd to OCI.encoding incorrectly.
57
+
58
+ - Fix memory leaks when temporary lobs are used.
59
+
60
+ - Fix a problem to assign NULL bind value to object type bind variables.
61
+ (reported by Raimonds Simanovskis)
62
+
63
+ - Support LOB datatypes in object type.
64
+ (reported by Michael Sexton)
65
+
66
+ - Fix to compile on cygwin. The declaration of 'boolean' in Oracle
67
+ conflicts with that of latest cygwin.
68
+ (reported by Don Hill).
69
+
70
+ - Fix to complie for the 32-bit ruby which was compiled on x86_64 linux
71
+ and configured without '--build', '--host' nor '--target'.
72
+ The RUBY_PLATFORM is 'x86_64-linux' even though the ruby is 32-bit.
73
+ (reported by Jason Renschler)
74
+
75
+ - Fix wrong dependencies in Makefile when running 'make -jNNN (where NNN >= 2)'
76
+ (contributed by Alyano Alyanos. See bug #28129 on rubyforge.)
77
+
78
+ - Fix to compile on HP-UX. Duplicated const qualifiers prevented HP-UX cc
79
+ from compiling. (reported by Sebastian YEPES)
80
+
81
+ 2.0.4:
82
+
83
+ * New Features
84
+
85
+ - OCI8.error_message(message_no) -> string
86
+
87
+ Gets the Oracle error message specified by message id.
88
+ Its language depends on NLS_LANGUAGE.
89
+
90
+ Note: This method is unavailable if the Oracle client
91
+ version is 8.0.
92
+
93
+ # When NLS_LANG is AMERICAN_AMERICA.AL32UTF8
94
+ OCI8.error_message(1)
95
+ # => "ORA-00001: unique constraint (%s.%s) violated"
96
+
97
+ # When NLS_LANG is FRENCH_FRANCE.AL32UTF8
98
+ OCI8.error_message(1)
99
+ # => "ORA-00001: violation de contrainte unique (%s.%s)"
100
+
101
+ - OraNumber#dump -> string
102
+
103
+ Returns OraNumber's internal representation whose format
104
+ is same with the return value of Oracle SQL function DUMP().
105
+
106
+ OraNumber.new(100).dump #=> "Typ=2 Len=2: 194,2"
107
+ OraNumber.new(123).dump #=> "Typ=2 Len=3: 194,2,24"
108
+ OraNumber.new(0.1).dump #=> "Typ=2 Len=2: 192,11"
109
+
110
+ * Fixed issues
111
+
112
+ - Fractional second part is lost when ruby's Time instance is bound
113
+ to Oracle datatype TIMESTAMP.
114
+ (reported by Raimonds Simanovskis)
115
+
116
+ - OraNumber#to_i and OraNumber#to_s fail when its scale is larger
117
+ than 38.
118
+ (reported by Raimonds Simanovskis)
119
+
120
+ - Memory leak about 30 bytes per one place holder for object type.
121
+
122
+ - Segmentation fault when a collection of string is bound.
123
+ (reported by Raimonds Simanovskis)
124
+
125
+ - Segmentation fault when GC starts while initializing a bind
126
+ object for object type.
127
+ (reported by Remi Gagnon)
128
+
129
+ - Segmentation fault when OCI8::Cursor#fetch is called prior to
130
+ OCI8::Cursor#exec.
131
+
132
+ - Detailed error message is not reported when PL/SQL NO_DATA_FOUND
133
+ exception is raised.
134
+ (reported by Raimonds Simanovskis)
135
+
136
+ 2.0.3:
137
+
138
+ * Incompatible Changes
139
+
140
+ - Number column in a SQL statement
141
+
142
+ Changes the default data type for number column which fit neither
143
+ Integer nor Float from OraNumber to BigDecimal.
144
+
145
+ conn.exec("select 1.0 from dual") do |row|
146
+ p row[0] # => BigDecimal("1") if the ruby-oci8 version is 2.0.3.
147
+ # => OraNumber(1) if the version is 2.0.2.
148
+ end
149
+
150
+ - Priority of OraNumber within numerical types
151
+
152
+ The return types of basic arithmetic operations with other numerical
153
+ types are changed.
154
+
155
+ 2.0.3:
156
+ OraNumber + Integer => OraNumber (OraNumber wins.)
157
+ OraNumber + Float => Float (OraNumber loses.)
158
+ OraNumber + Rational => Rational (OraNumber loses.)
159
+ OraNumber + BigDecimal => BigDecimal (OraNumber loses.)
160
+
161
+ 2.0.2:
162
+ OraNumber + Integer => OraNumber (OraNumber wins always.)
163
+ OraNumber + Float => OraNumber
164
+ OraNumber + Rational => OraNumber
165
+ OraNumber + BigDecimal => OraNumber
166
+
167
+ - Interval day to second
168
+
169
+ The retrived value of Oracle data type "interval day to second"
170
+ was changed from the number of days as a Rational to the number
171
+ of seconds as a Float by default.
172
+ Use OCI8::BindType::IntervalDS.unit = :day to make it compatible
173
+ with the previous versions.
174
+
175
+ conn.exec("select to_dsinterval('0 00:00:01') from dual") do |row|
176
+ p row[0] # => 1.0 if the version is 2.0.3 and
177
+ # OCI8::BindType::IntervalDS.unit is :second.
178
+ # => (1/86400) if the version is 2.0.3 and
179
+ # OCI8::BindType::IntervalDS.unit is :day or
180
+ # the version is 2.0.2.
181
+ end
182
+
183
+ - Date, timestamp, timestamp with time zone data types and ruby 1.9.2
184
+
185
+ These data types are retrived always as Time values when the
186
+ ruby version is 1.9.2 because the Time class is enhanced to
187
+ represent any time zone and is free from year 2038 problem.
188
+
189
+ Prior to ruby 1.9.2, if the time cannot be represented by
190
+ Unix time or the time zone is neither utc nor local, they are
191
+ retrived as DateTime values.
192
+
193
+ - Non-blocking mode and ruby 1.9
194
+
195
+ non-blocking mode is enabled by default when the ruby is 1.9.
196
+
197
+ * New Features
198
+
199
+ - BigDecimal and Rational are availabe as bind values.
200
+
201
+ - New methods OCI8#module=, OCI8#action= and OCI8#client_info= are added.
202
+
203
+ These methods change the module name, the action name and the client_info
204
+ in the current session respectively.
205
+
206
+ After Oracle 10g client, these don't perform network round trips.
207
+ The change is reflected to the server by the next round trip such as
208
+ OCI8#exec, OCI8#ping, etc.
209
+
210
+ Prior to Oracle 10g client, these call PL/SQL functions such as
211
+ DBMS_APPLICATION_INFO.SET_MODULE, DBMS_APPLICATION_INFO.SET_ACTION,
212
+ and DBMS_APPLICATION_INFO.SET_CLIENT_INFO internally.
213
+ The change is reflected immediately by a network round trip.
214
+
215
+ - OCI8::BindType.default_timezone
216
+
217
+ The default time zone of Time or DateTime values.
218
+ This parameter is used only when
219
+ (1) date values are fetched and the Oracle client version is 8.x
220
+ or
221
+ (2) object types have date data type attributes.
222
+
223
+ Note that if the Oracle client version is 9i or upper, the time
224
+ zone is determined by the session time zone. The default value
225
+ is local time zone. You can change it to GMT by executing the
226
+ following SQL statement for each connection.
227
+
228
+ alter session set time_zone = '00:00'
229
+
230
+ * Other specification changes
231
+
232
+ - Add a global function OraNumber(obj) as a shortcut of OraNumber.new(obj)
233
+ as Rational and BigDecimal do.
234
+
235
+ - Fix to accept nil attribute in object type's
236
+ constructors. This works only for simple data types such as number,
237
+ string. But it doesn't for complex types such as object types.
238
+ (requested by Remi Gagnon)
239
+
240
+ - add DATE datatype support in object types.
241
+
242
+ - Change OCI8::LOB#write to accept an object which is not a String and
243
+ doesn't respond to 'to_str' as IO#write does.
244
+ (requested by Christopher Jones)
245
+
246
+ - Change the initial polling interval of
247
+ non-blocking mode for ruby 1.8 from 100 msec to 10 msec, which
248
+ is same with ruby-oci8 1.0.
249
+
250
+ * Fixed installation issues.
251
+
252
+ - Fix oraconf.rb for ruby 1.8.5 with Oracle 8.x which needs some object
253
+ files to link with.
254
+ (reported by Jayson Cena)
255
+
256
+ - Fix oraconf.rb for ruby 1.9.2 preview1.
257
+ (pointed by Raimonds Simanovskis)
258
+
259
+ - Fix oraconf.rb to compile for AIX instant clients.
260
+ (reported by Kazuya Teramoto)
261
+
262
+ 2.0.2:
263
+
264
+ * add new methods
265
+ - OCI8#select_one(sql, *bindvars) -> first_row
266
+
267
+ - OCI8#ping -> true or false
268
+
269
+ Verifies that the Oracle connection is alive.
270
+ OCI8#ping also can be used to flush all the pending OCI
271
+ client-side calls to the server if any exist.
272
+
273
+ - OCI8#client_identifier = client_id
274
+
275
+ Look at the following link to know what is the client identifier.
276
+ http://it.toolbox.com/blogs/database-solutions/oracle-session-tracing-part-i-16356
277
+
278
+ Note that the specified identifier doesn't change the v$session
279
+ immediately. It is done by the next network round trip
280
+ such as OCI8#exec or OCI8#ping.
281
+
282
+ * fix problems when compiling with Oracle 9.2 and 8.0.
283
+ (reported by Axel Reinhold)
284
+
285
+ * [dbi] fix to pass a newly added sanity check in dbi 0.4.1.
286
+ (reported by Dirk Herzhauser)
287
+
288
+ * fix an error when executing "select NULL from dual".
289
+ http://rubyforge.org/forum/forum.php?thread_id=32468&forum_id=1078
290
+ (contributed by Raimonds Simanovskis)
291
+
292
+ * [ruby 1.9] fix OCI8::BLOB to read/write binary. Prior to 2.0.1,
293
+ it was treated as text tagged with NLS_LANG encoding.
294
+
295
+ * [ruby 1.9] fix to bind string data by the length got from String#bytesize
296
+ converted to OCI8.encoding, not by String#size.
297
+
298
+ 2.0.1:
299
+
300
+ * release a binary gem for Windows, which contains libraries for both
301
+ ruby 1.8 and ruby 1.9.1.
302
+ * add OCI8#oracle_server_version.
303
+ * fix bugs when fetching and binding time objects.
data/README ADDED
@@ -0,0 +1,76 @@
1
+ = How to make
2
+
3
+ * <tt>ruby</tt> and <tt>make</tt> (or nmake on MSVC) commands in the environment variable <tt>PATH</tt>?
4
+ * <tt>ruby</tt> is 1.8.0 or later? (Use ruby-oci8 0.1.x for ruby 1.6.x.)
5
+
6
+ == For OCI installed by Oracle Universal Installer
7
+ make sure the environment variable ORACLE_HOME (or registry on Windows)
8
+ is set correctly. run the the following commands.
9
+
10
+ make (or nmake on MSVC)
11
+
12
+ == For OCI installed by Oracle Instant Installer
13
+
14
+ linux:
15
+ ruby setup.rb config -- --with-instant-client
16
+ make
17
+
18
+ others:
19
+ ruby setup.rb config -- --with-instant-client=/path/to/instantclient10_1
20
+ make (or nmake on MSVC)
21
+
22
+ = On compilation failure
23
+
24
+ Please report the following information to kubo@jiubao.org.
25
+
26
+ * last 100 lines of 'ext/oci8/mkmf.log'.
27
+ * the results of the following commands:
28
+ ruby -r rbconfig -e "p Config::CONFIG['host']"
29
+ ruby -r rbconfig -e "p Config::CONFIG['CC']"
30
+ ruby -r rbconfig -e "p Config::CONFIG['CFLAGS']"
31
+ ruby -r rbconfig -e "p Config::CONFIG['LDSHARED']"
32
+ ruby -r rbconfig -e "p Config::CONFIG['LDFLAGS']"
33
+ ruby -r rbconfig -e "p Config::CONFIG['LIBS']"
34
+ ruby -r rbconfig -e "p Config::CONFIG['GNU_LD']"
35
+ * if you use gcc:
36
+ gcc --print-prog-name=ld
37
+ gcc --print-prog-name=as
38
+ * on platforms which can use both 32bit/64bit binaries:
39
+ file $ORACLE_HOME/bin/oracle
40
+ file `which ruby`
41
+ echo $LD_LIBRARY_PATH
42
+
43
+ = How to run unit test
44
+
45
+ before runing unit test,
46
+ 1. connect to Oracle as system:
47
+
48
+ $ sqlplus system/<password_of_system>
49
+
50
+ 2. create user ruby:
51
+
52
+ SQL> CREATE USER ruby IDENTIFIED BY oci8;
53
+
54
+ or
55
+
56
+ SQL> CREATE USER ruby IDENTIFIED BY oci8
57
+ 2 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
58
+
59
+ 3. grant the privilege to connect and execute.
60
+
61
+ SQL> GRANT connect, resource, create view TO ruby;
62
+
63
+ 4. connect to Oracle as sys
64
+
65
+ $ sqlplus 'sys/<password_of_sys> as sysdba'
66
+
67
+ 5. grant the privilege for the unittest of blocking-mode.
68
+
69
+ SQL> GRANT EXECUTE ON dbms_lock TO ruby;
70
+
71
+ 6. change test/config.rb as you like
72
+
73
+ Then you can run:
74
+ $ make check
75
+ or
76
+ $ nmake check (If your compiler is MS Visual C++.)