ruby-oci8 2.0.2 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +121 -0
- data/Makefile +11 -4
- data/NEWS +126 -0
- data/VERSION +1 -1
- data/ext/oci8/.document +16 -1
- data/ext/oci8/apiwrap.yml +9 -0
- data/ext/oci8/attr.c +1 -1
- data/ext/oci8/bind.c +1 -38
- data/ext/oci8/extconf.rb +8 -9
- data/ext/oci8/lob.c +5 -3
- data/ext/oci8/object.c +12 -0
- data/ext/oci8/oci8.c +403 -115
- data/ext/oci8/oci8.h +4 -0
- data/ext/oci8/oci8lib.c +10 -1
- data/ext/oci8/ocidatetime.c +47 -5
- data/ext/oci8/ocinumber.c +254 -47
- data/ext/oci8/oraconf.rb +40 -11
- data/ext/oci8/oradate.c +1 -1
- data/lib/.document +0 -1
- data/lib/oci8.rb.in +1 -1
- data/lib/oci8/.document +2 -2
- data/lib/oci8/bindtype.rb +32 -8
- data/lib/oci8/compat.rb +5 -0
- data/lib/oci8/datetime.rb +284 -160
- data/lib/oci8/object.rb +18 -4
- data/lib/oci8/oci8.rb +24 -4
- data/test/test_appinfo.rb +34 -0
- data/test/test_clob.rb +13 -0
- data/test/test_datetime.rb +160 -7
- data/test/test_oci8.rb +31 -3
- data/test/test_oranumber.rb +12 -7
- metadata +3 -3
data/ChangeLog
CHANGED
@@ -1,3 +1,124 @@
|
|
1
|
+
2009-10-21 KUBO Takehiro <kubo@jiubao.org>
|
2
|
+
* NEWS: add changes between 2.0.2 and 2.0.3.
|
3
|
+
* VERSION, Makefile: change the version to 2.0.3.
|
4
|
+
* ext/oci8/oci8.c: fix typo.
|
5
|
+
* ext/oci8/apiwrap.yml: add OCIIntervalFromText() prototype.
|
6
|
+
|
7
|
+
2009-10-18 KUBO Takehiro <kubo@jiubao.org>
|
8
|
+
* ext/oci8/ocidatetime.c: Add workarounds for Oracle 9.2.0.1.
|
9
|
+
* lib/oci8/datetime.rb: Change the unit of OCI8::BindType::IntervalDS
|
10
|
+
from day to second. Add OCI8::BindType::IntervalDS.unit and
|
11
|
+
OCI8::BindType::IntervalDS.unit=.
|
12
|
+
* test/test_datetime.rb: Fix tests for the above changes.
|
13
|
+
|
14
|
+
2009-10-17 KUBO Takehiro <kubo@jiubao.org>
|
15
|
+
* ext/oci8/oci8.c: Add a workaround for Oracle 9.2.0.1 when clearing
|
16
|
+
a client identifier.
|
17
|
+
* ext/oci8/oci8lib.c: Fix a segv when canceling a non-blocking
|
18
|
+
execution.
|
19
|
+
* test_appinfo.rb: Fix temporarily to prevent a segmentation fault
|
20
|
+
under Oracle 9.2.0.1.
|
21
|
+
* test/test_oci8.rb: Fix temporarily to prevent a segmentation fault
|
22
|
+
under Oracle 9.2.0.1. Fix for BigDecimal bundled in ruby 1.8.5.
|
23
|
+
* test/test_oranumber.rb: Fix for Oracle 9.2. Comparing float values
|
24
|
+
by <=> is too sensitive to use it in tests.
|
25
|
+
|
26
|
+
2009-10-06 KUBO Takehiro <kubo@jiubao.org>
|
27
|
+
* ext/oci8/ocinumber.c: Add a global function OraNumber(obj) as a
|
28
|
+
shortcut of OraNumber.new(obj) as Rational and BigDecimal do.
|
29
|
+
Changes the return type of the four rules of arithmetic;
|
30
|
+
addition, subtraction, multiplication and division. It was
|
31
|
+
OraNumber, but now it depends on the operand.
|
32
|
+
* lib/oci8/bindtype.rb: Add OCI8::BindType::BigDecimal and
|
33
|
+
OCI8::BindType::Rational. Change the default data type for
|
34
|
+
number column which fit neither Integer nor Float from
|
35
|
+
OraNumber to BigDecimal.
|
36
|
+
* lib/oci8/oci8.rb: Fix for OCI8::BindType::Mapping to accept
|
37
|
+
a class name instead of the class object to support
|
38
|
+
OCI8::BindType::BigDecimal and OCI8::BindType::Rational without
|
39
|
+
requiring 'bigdecimal' and 'rational'.
|
40
|
+
* spec/oranumber_spec.rb: Add a spec file for OraNumber arithmetic.
|
41
|
+
* test/test_oci8.rb: Add tests for OCI8::BindType::BigDecimal and
|
42
|
+
OCI8::BindType::Rational.
|
43
|
+
|
44
|
+
2009-10-04 KUBO Takehiro <kubo@jiubao.org>
|
45
|
+
* ext/oci8/oci8.c: Add constants missing in Oracle client prior to 10g.
|
46
|
+
* ext/oci8/oraconf.rb:
|
47
|
+
1. Fix for ruby 1.8.5 with Oracle 8.x which needs some object
|
48
|
+
files to link with.
|
49
|
+
(reported by Jayson Cena)
|
50
|
+
2. Revise the error message under the sudo environemnt.
|
51
|
+
3. Print not only error message but also the error backtrace when
|
52
|
+
oraconf.rb fails.
|
53
|
+
* lib/oci8/object.rb: Fix to accept nil attribute in object type's
|
54
|
+
constructors. This works only for simple data types such as number,
|
55
|
+
string. But it doesn't for complex types such as object types.
|
56
|
+
(requested by Remi Gagnon)
|
57
|
+
* spec/object_type_spec.rb: Add a test for object type's constructors.
|
58
|
+
|
59
|
+
2009-09-22 KUBO Takehiro <kubo@jiubao.org>
|
60
|
+
* lib/oci8/.document, lib/oci8/datetime.rb: 1. Add
|
61
|
+
OCI8::BindType.default_timezone and OCI8::BindType.default_timezone=.
|
62
|
+
2. Change the logic to convert to Time and DateTime to adapt DST.
|
63
|
+
3. Use new features of Time class in ruby 1.9.2 if they are available.
|
64
|
+
4. Add rdoc comments.
|
65
|
+
* spec/fetch_datetime8_spec.rb, spec/fetch_datetime_spec.rb,
|
66
|
+
spec/fetch_time8_spec.rb, spec/fetch_time_spec.rb,
|
67
|
+
spec/spec_helper.rb: Add tests for OCI8::BindType::DateTime and
|
68
|
+
OCI8::BindType::Time.
|
69
|
+
|
70
|
+
2009-09-13 KUBO Takehiro <kubo@jiubao.org>
|
71
|
+
* ext/oci8/lob.c, ext/oci8/oci8.h, test/test_clob.rb: Change
|
72
|
+
OCI8::LOB#write to accept an object which is not a String and
|
73
|
+
doesn't respond to 'to_str' as IO#write does.
|
74
|
+
(requested by Christopher Jones)
|
75
|
+
|
76
|
+
2009-09-12 KUBO Takehiro <kubo@jiubao.org>
|
77
|
+
* ext/oci8/extconf.rb, lib/oci8.rb.in: Fixed for ruby 1.9.2 preview1.
|
78
|
+
(pointed by Raimonds Simanovskis)
|
79
|
+
|
80
|
+
2009-09-12 KUBO Takehiro <kubo@jiubao.org>
|
81
|
+
* ext/oci8/oraconf.rb: Fixed to compile for AIX instant clients.
|
82
|
+
(reported by Kazuya Teramoto)
|
83
|
+
|
84
|
+
2009-06-09 KUBO Takehiro <kubo@jiubao.org>
|
85
|
+
* ext/oci8/oci8lib.c: Change the initial polling interval of
|
86
|
+
non-blocking mode for ruby 1.8 from 100 msec to 10 msec, which
|
87
|
+
is same with ruby-oci8 1.0.
|
88
|
+
* ext/oci8/oci8.c: Change the default setting of non-blocking mode
|
89
|
+
for ruby 1.9 to true. Revise rdoc comments.
|
90
|
+
|
91
|
+
2009-06-07 KUBO Takehiro <kubo@jiubao.org>
|
92
|
+
* ext/oci8/oci8.c: revise rdoc comments.
|
93
|
+
|
94
|
+
2009-06-05 KUBO Takehiro <kubo@jiubao.org>
|
95
|
+
* Makefile: check rdoc version when making rdoc documentation.
|
96
|
+
The rdoc version must be 2.4.
|
97
|
+
* ext/oci8/.document, ext/oci8/oci8.c, lib/.document,
|
98
|
+
lib/oci8/.document, lib/oci8/oci8.rb: fix rdoc comments a bit.
|
99
|
+
|
100
|
+
2009-05-24 KUBO Takehiro <kubo@jiubao.org>
|
101
|
+
* ext/oci8/object.c, lib/oci8/datetime.rb, lib/oci8/object.rb:
|
102
|
+
add DATE datatype support in object types.
|
103
|
+
|
104
|
+
2009-05-19 KUBO Takehiro <kubo@jiubao.org>
|
105
|
+
* ext/oci8/bind.c: delete OCI8::BindType::Fixnum.
|
106
|
+
* lib/oci8/compat.rb: add OCI8::BindType::Fixnum as an alias
|
107
|
+
of OCI8::BindType::Integer.
|
108
|
+
* ext/oci8/extconf.rb: change extconf.rb's argument value of
|
109
|
+
'--with-oracle-version' to accept dotted version such as
|
110
|
+
'9.2.0.'
|
111
|
+
* ext/oci8/oraconf.rb: When extconf.rb fails and it is run
|
112
|
+
by sudo command, change the error message to notice that
|
113
|
+
'sudo' may unset environment variables.
|
114
|
+
|
115
|
+
2009-05-18 KUBO Takehiro <kubo@jiubao.org>
|
116
|
+
* ext/oci8/oci8.c: revise rdoc comments for OCI8#ping and
|
117
|
+
OCI8#client_identifier=. Add OCI8#module=, OCI8#action= and
|
118
|
+
OCI8#client_info.
|
119
|
+
* test/test_appinfo.rb: add test cases for OCI8#module=,
|
120
|
+
OCI8#action= and OCI8#client_info.
|
121
|
+
|
1
122
|
2009-05-17 KUBO Takehiro <kubo@jiubao.org>
|
2
123
|
* NEWS: add changes between 2.0.1 and 2.0.2.
|
3
124
|
* VERSION: change version to 2.0.2.
|
data/Makefile
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
VERSION = `cat VERSION`
|
2
2
|
RUBY = ruby -w
|
3
|
+
RDOC = rdoc
|
3
4
|
|
4
5
|
all: build
|
5
6
|
|
@@ -30,10 +31,16 @@ format_c_source:
|
|
30
31
|
astyle --options=none --style=linux --indent=spaces=4 --brackets=linux --suffix=none ext/oci8/*.[ch]
|
31
32
|
|
32
33
|
# internal use only
|
33
|
-
.PHONY: rdoc
|
34
|
+
.PHONY: rdoc check-rdoc-version run-rdoc
|
34
35
|
|
35
|
-
rdoc:
|
36
|
-
|
36
|
+
rdoc: check-rdoc-version run-rdoc
|
37
|
+
|
38
|
+
check-rdoc-version:
|
39
|
+
@echo check rdoc version
|
40
|
+
@expr match "`$(RDOC) --version`" '^rdoc 2\.4' > /dev/null || (echo 'rdoc version is not 2.4.'; exit 1)
|
41
|
+
|
42
|
+
run-rdoc:
|
43
|
+
TZ= $(RDOC) -o rdoc -c us-ascii --threads=1 -W http://ruby-oci8.rubyforge.org/svn/trunk/ruby-oci8/ ext/oci8 lib
|
37
44
|
|
38
45
|
dist:
|
39
46
|
-rm -rf ruby-oci8-$(VERSION)
|
@@ -52,7 +59,7 @@ dist-check: dist
|
|
52
59
|
#
|
53
60
|
RUBY_18 = c:\ruby
|
54
61
|
RUBY_191 = c:\ruby-1.9.1
|
55
|
-
GEMPKG = ruby-oci8-2.0.
|
62
|
+
GEMPKG = ruby-oci8-2.0.3-x86-mswin32-60.gem
|
56
63
|
|
57
64
|
ext\oci8\oci8lib_18.so:
|
58
65
|
$(RUBY_18)\bin\ruby -r fileutils -e "FileUtils.rm_rf('ruby18')"
|
data/NEWS
CHANGED
@@ -1,3 +1,129 @@
|
|
1
|
+
2.0.3:
|
2
|
+
|
3
|
+
* Imcompatible Changes
|
4
|
+
|
5
|
+
- Number column in a SQL statement
|
6
|
+
|
7
|
+
Changes the default data type for number column which fit neither
|
8
|
+
Integer nor Float from OraNumber to BigDecimal.
|
9
|
+
|
10
|
+
conn.exec("select 1.0 from dual") do |row|
|
11
|
+
p row[0] # => BigDecimal("1") if the ruby-oci8 version is 2.0.3.
|
12
|
+
# => OraNumber(1) if the version is 2.0.2.
|
13
|
+
end
|
14
|
+
|
15
|
+
- Priority of OraNumber within numerical types
|
16
|
+
|
17
|
+
The return types of basic arithmetic operations with other numerical
|
18
|
+
types are changed.
|
19
|
+
|
20
|
+
2.0.3:
|
21
|
+
OraNumber + Integer => OraNumber (OraNumber wins.)
|
22
|
+
OraNumber + Float => Float (OraNumber loses.)
|
23
|
+
OraNumber + Rational => Rational (OraNumber loses.)
|
24
|
+
OraNumber + BigDecimal => BigDecimal (OraNumber loses.)
|
25
|
+
|
26
|
+
2.0.2:
|
27
|
+
OraNumber + Integer => OraNumber (OraNumber wins always.)
|
28
|
+
OraNumber + Float => OraNumber
|
29
|
+
OraNumber + Rational => OraNumber
|
30
|
+
OraNumber + BigDecimal => OraNumber
|
31
|
+
|
32
|
+
- Interval day to second
|
33
|
+
|
34
|
+
The retrived value of Oracle data type "interval day to second"
|
35
|
+
was changed from the number of days as a Rational to the number
|
36
|
+
of seconds as a Float by default.
|
37
|
+
Use OCI8::BindType::IntervalDS.unit = :day to make it compatible
|
38
|
+
with the previous versions.
|
39
|
+
|
40
|
+
conn.exec("select to_dsinterval('0 00:00:01') from dual") do |row|
|
41
|
+
p row[0] # => 1.0 if the version is 2.0.3 and
|
42
|
+
# OCI8::BindType::IntervalDS.unit is :second.
|
43
|
+
# => (1/86400) if the version is 2.0.3 and
|
44
|
+
# OCI8::BindType::IntervalDS.unit is :day or
|
45
|
+
# the version is 2.0.2.
|
46
|
+
end
|
47
|
+
|
48
|
+
- Date, timestamp, timestamp with time zone data types and ruby 1.9.2
|
49
|
+
|
50
|
+
These data types are retrived always as Time values when the
|
51
|
+
ruby version is 1.9.2 because the Time class is enhanced to
|
52
|
+
represent any time zone and is free from year 2038 problem.
|
53
|
+
|
54
|
+
Prior to ruby 1.9.2, if the time cannot be represented by
|
55
|
+
Unix time or the time zone is neither utc nor local, they are
|
56
|
+
retrived as DateTime values.
|
57
|
+
|
58
|
+
- Non-blocking mode and ruby 1.9
|
59
|
+
|
60
|
+
non-blocking mode is enabled by default when the ruby is 1.9.
|
61
|
+
|
62
|
+
* New Features
|
63
|
+
|
64
|
+
- BigDecimal and Rational are availabe as bind values.
|
65
|
+
|
66
|
+
- New methods OCI8#module=, OCI8#action= and OCI8#client_info= are added.
|
67
|
+
|
68
|
+
These methods change the module name, the action name and the client_info
|
69
|
+
in the current session respectively.
|
70
|
+
|
71
|
+
After Oracle 10g client, these don't perform network round trips.
|
72
|
+
The change is reflected to the server by the next round trip such as
|
73
|
+
OCI8#exec, OCI8#ping, etc.
|
74
|
+
|
75
|
+
Prior to Oracle 10g client, these call PL/SQL functions such as
|
76
|
+
DBMS_APPLICATION_INFO.SET_MODULE, DBMS_APPLICATION_INFO.SET_ACTION,
|
77
|
+
and DBMS_APPLICATION_INFO.SET_CLIENT_INFO internally.
|
78
|
+
The change is reflected immediately by a network round trip.
|
79
|
+
|
80
|
+
- OCI8::BindType.default_timezone
|
81
|
+
|
82
|
+
The default time zone of Time or DateTime values.
|
83
|
+
This parameter is used only when
|
84
|
+
(1) date values are fetched and the Oracle client version is 8.x
|
85
|
+
or
|
86
|
+
(2) object types have date data type attributes.
|
87
|
+
|
88
|
+
Note that if the Oracle client version is 9i or upper, the time
|
89
|
+
zone is determined by the session time zone. The default value
|
90
|
+
is local time zone. You can change it to GMT by executing the
|
91
|
+
following SQL statement for each connection.
|
92
|
+
|
93
|
+
alter session set time_zone = '00:00'
|
94
|
+
|
95
|
+
* Other specification changes
|
96
|
+
|
97
|
+
- Add a global function OraNumber(obj) as a shortcut of OraNumber.new(obj)
|
98
|
+
as Rational and BigDecimal do.
|
99
|
+
|
100
|
+
- Fix to accept nil attribute in object type's
|
101
|
+
constructors. This works only for simple data types such as number,
|
102
|
+
string. But it doesn't for complex types such as object types.
|
103
|
+
(requested by Remi Gagnon)
|
104
|
+
|
105
|
+
- add DATE datatype support in object types.
|
106
|
+
|
107
|
+
- Change OCI8::LOB#write to accept an object which is not a String and
|
108
|
+
doesn't respond to 'to_str' as IO#write does.
|
109
|
+
(requested by Christopher Jones)
|
110
|
+
|
111
|
+
- Change the initial polling interval of
|
112
|
+
non-blocking mode for ruby 1.8 from 100 msec to 10 msec, which
|
113
|
+
is same with ruby-oci8 1.0.
|
114
|
+
|
115
|
+
* Fixed installation issues.
|
116
|
+
|
117
|
+
- Fix oraconf.rb for ruby 1.8.5 with Oracle 8.x which needs some object
|
118
|
+
files to link with.
|
119
|
+
(reported by Jayson Cena)
|
120
|
+
|
121
|
+
- Fix oraconf.rb for ruby 1.9.2 preview1.
|
122
|
+
(pointed by Raimonds Simanovskis)
|
123
|
+
|
124
|
+
- Fix oraconf.rb to compile for AIX instant clients.
|
125
|
+
(reported by Kazuya Teramoto)
|
126
|
+
|
1
127
|
2.0.2:
|
2
128
|
|
3
129
|
* add new methods
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.
|
1
|
+
2.0.3
|
data/ext/oci8/.document
CHANGED
data/ext/oci8/apiwrap.yml
CHANGED
@@ -1076,6 +1076,15 @@ OCIDateTimeGetTime:
|
|
1076
1076
|
- ub1 *ss
|
1077
1077
|
- ub4 *fsec
|
1078
1078
|
|
1079
|
+
# round trip: 0 (not docmented. I guess.)
|
1080
|
+
OCIIntervalFromText:
|
1081
|
+
:version: 900
|
1082
|
+
:args: - dvoid *hndl
|
1083
|
+
- OCIError *err
|
1084
|
+
- CONST OraText *inpstr
|
1085
|
+
- size_t str_len
|
1086
|
+
- OCIInterval *result
|
1087
|
+
|
1079
1088
|
# round trip: 0 (not docmented. I guess.)
|
1080
1089
|
OCIDateTimeGetTimeZoneOffset:
|
1081
1090
|
:version: 900
|
data/ext/oci8/attr.c
CHANGED
data/ext/oci8/bind.c
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
* bind.c
|
4
4
|
*
|
5
5
|
* $Author: kubo $
|
6
|
-
* $Date: 2009-
|
6
|
+
* $Date: 2009-10-21 22:50:01 +0900 (Wed, 21 Oct 2009) $
|
7
7
|
*
|
8
8
|
* Copyright (C) 2002-2008 KUBO Takehiro <kubo@jiubao.org>
|
9
9
|
*/
|
@@ -238,42 +238,6 @@ static const oci8_bind_class_t bind_long_raw_class = {
|
|
238
238
|
};
|
239
239
|
#endif /* USE_DYNAMIC_FETCH */
|
240
240
|
|
241
|
-
/*
|
242
|
-
* bind_fixnum
|
243
|
-
*/
|
244
|
-
static VALUE bind_fixnum_get(oci8_bind_t *obind, void *data, void *null_struct)
|
245
|
-
{
|
246
|
-
return LONG2NUM(*(long*)data);
|
247
|
-
}
|
248
|
-
|
249
|
-
static void bind_fixnum_set(oci8_bind_t *obind, void *data, void **null_structp, VALUE val)
|
250
|
-
{
|
251
|
-
Check_Type(val, T_FIXNUM);
|
252
|
-
*(long*)data = FIX2LONG(val);
|
253
|
-
}
|
254
|
-
|
255
|
-
static void bind_fixnum_init(oci8_bind_t *obind, VALUE svc, VALUE val, VALUE length)
|
256
|
-
{
|
257
|
-
obind->value_sz = sizeof(long);
|
258
|
-
obind->alloc_sz = sizeof(long);
|
259
|
-
}
|
260
|
-
|
261
|
-
static const oci8_bind_class_t bind_fixnum_class = {
|
262
|
-
{
|
263
|
-
NULL,
|
264
|
-
oci8_bind_free,
|
265
|
-
sizeof(oci8_bind_t)
|
266
|
-
},
|
267
|
-
bind_fixnum_get,
|
268
|
-
bind_fixnum_set,
|
269
|
-
bind_fixnum_init,
|
270
|
-
NULL,
|
271
|
-
NULL,
|
272
|
-
NULL,
|
273
|
-
NULL,
|
274
|
-
SQLT_INT
|
275
|
-
};
|
276
|
-
|
277
241
|
/*
|
278
242
|
* bind_float
|
279
243
|
*/
|
@@ -493,7 +457,6 @@ void Init_oci8_bind(VALUE klass)
|
|
493
457
|
oci8_define_bind_class("Long", &bind_long_class);
|
494
458
|
oci8_define_bind_class("LongRaw", &bind_long_raw_class);
|
495
459
|
#endif /* USE_DYNAMIC_FETCH */
|
496
|
-
oci8_define_bind_class("Fixnum", &bind_fixnum_class);
|
497
460
|
oci8_define_bind_class("Float", &bind_float_class);
|
498
461
|
if (oracle_client_version >= ORAVER_10_1) {
|
499
462
|
oci8_define_bind_class("BinaryDouble", &bind_binary_double_class);
|
data/ext/oci8/extconf.rb
CHANGED
@@ -11,6 +11,7 @@ end
|
|
11
11
|
|
12
12
|
require File.dirname(__FILE__) + '/oraconf'
|
13
13
|
require File.dirname(__FILE__) + '/apiwrap'
|
14
|
+
require File.dirname(__FILE__) + '/../../lib/oci8/oracle_version.rb'
|
14
15
|
|
15
16
|
RUBY_OCI8_VERSION = File.read("#{File.dirname(__FILE__)}/../../VERSION").chomp
|
16
17
|
|
@@ -70,7 +71,7 @@ have_type('OCICallbackLobWrite2', 'ociap.h')
|
|
70
71
|
have_type('OCIAdmin*', 'ociap.h')
|
71
72
|
|
72
73
|
if with_config('oracle-version')
|
73
|
-
oci_client_version = with_config('oracle-version').to_i
|
74
|
+
oci_client_version = OCI8::OracleVersion.new(with_config('oracle-version')).to_i
|
74
75
|
else
|
75
76
|
oci_client_version = oci_actual_client_version
|
76
77
|
end
|
@@ -118,14 +119,12 @@ replace = {
|
|
118
119
|
# make ruby script before running create_makefile.
|
119
120
|
replace_keyword(File.dirname(__FILE__) + '/../../lib/oci8.rb.in', '../../lib/oci8.rb', replace)
|
120
121
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
raise 'unsupported ruby version: ' + RUBY_VERSION
|
128
|
-
end
|
122
|
+
# Config::CONFIG["ruby_version"] indicates the ruby API version.
|
123
|
+
# 1.8 - ruby 1.8.x
|
124
|
+
# 1.9.1 - ruby 1.9.1 and 1.9.2
|
125
|
+
# 1.9.x - ruby 1.9.x future version which will break the API compatibility
|
126
|
+
so_basename = "oci8lib_" + Config::CONFIG["ruby_version"].gsub(/\W/, '')
|
127
|
+
|
129
128
|
$defs << "-DInit_oci8lib=Init_#{so_basename}"
|
130
129
|
$defs << "-Doci8lib=#{so_basename}"
|
131
130
|
|
data/ext/oci8/lob.c
CHANGED
@@ -379,11 +379,13 @@ static VALUE oci8_lob_write(VALUE self, VALUE data)
|
|
379
379
|
ub4 amt;
|
380
380
|
|
381
381
|
lob_open(lob);
|
382
|
+
if (TYPE(data) != T_STRING) {
|
383
|
+
data = rb_obj_as_string(data);
|
384
|
+
}
|
382
385
|
if (lob->lobtype == OCI_TEMP_CLOB) {
|
383
|
-
|
384
|
-
} else {
|
385
|
-
StringValue(data);
|
386
|
+
data = rb_str_export_to_enc(data, oci8_encoding);
|
386
387
|
}
|
388
|
+
RB_GC_GUARD(data);
|
387
389
|
amt = RSTRING_LEN(data);
|
388
390
|
oci_lc(OCILobWrite_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob, &amt, lob->pos + 1, RSTRING_PTR(data), amt, OCI_ONE_PIECE, NULL, NULL, 0, lob->csfrm));
|
389
391
|
lob->pos += amt;
|