ruby-oci8 2.2.0.2 → 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +39 -0
- data/NEWS +38 -1
- data/ext/oci8/apiwrap.yml +0 -125
- data/ext/oci8/bind.c +55 -3
- data/ext/oci8/extconf.rb +26 -59
- data/ext/oci8/oci8.h +0 -32
- data/ext/oci8/oci8lib.c +0 -8
- data/ext/oci8/ocinumber.c +0 -16
- data/ext/oci8/oraconf.rb +3 -2
- data/lib/oci8/bindtype.rb +4 -0
- data/lib/oci8/oci8.rb +1 -16
- data/lib/oci8/version.rb +1 -1
- data/test/test_all.rb +1 -0
- metadata +3 -4
data/ChangeLog
CHANGED
@@ -1,3 +1,42 @@
|
|
1
|
+
2015-11-01 Kubo Takehiro <kubo@jiubao.org>
|
2
|
+
* NEWS: Add changes between 2.2.0.2 and 2.2.1.
|
3
|
+
* lib/oci8/version.rb: update to 2.2.1.
|
4
|
+
|
5
|
+
2015-11-01 Kubo Takehiro <kubo@jiubao.org>
|
6
|
+
* ext/oci8/extconf.rb, ext/oci8/oci8.h: Delete unnecessary checks.
|
7
|
+
* ext/oci8/oraconf.rb: Reduce time to build an import library on
|
8
|
+
Mingw32 and Cygwin.
|
9
|
+
|
10
|
+
2015-11-01 Kubo Takehiro <kubo@jiubao.org>
|
11
|
+
* lib/oci8/oci8.rb: delete code for Oracle 8i.
|
12
|
+
|
13
|
+
2015-10-26 Kubo Takehiro <kubo@jiubao.org>
|
14
|
+
* ext/oci8/oci8lib.c: Fix handle leaks when OCI8#ping is used and
|
15
|
+
the Oracle client version is 10gR1.
|
16
|
+
This bug was introduced in ruby-oci8 2.2.0.
|
17
|
+
|
18
|
+
2015-10-26 Kubo Takehiro <kubo@jiubao.org>
|
19
|
+
* ext/oci8/oci8lib.c: Revive code dropped in ruby-oci8 2.2.0.
|
20
|
+
This prevents potential SEGV on ruby process termination.
|
21
|
+
|
22
|
+
2015-10-26 Kubo Takehiro <kubo@jiubao.org>
|
23
|
+
* ext/oci8/ocinumber.c: Drop code for ruby 1.8.
|
24
|
+
Rational has been a built-in type since ruby 1.9.
|
25
|
+
|
26
|
+
2015-10-20 Kubo Takehiro <kubo@jiubao.org>
|
27
|
+
* ext/oci8/bind.c, lib/oci8/bindtype.rb, test/test_all.rb,
|
28
|
+
test/test_bind_boolean.rb: Support boolean type binding.
|
29
|
+
|
30
|
+
2015-10-19 Kubo Takehiro <kubo@jiubao.org>
|
31
|
+
* ext/oci8/apiwrap.yml: Delete unused OCI function definitions.
|
32
|
+
|
33
|
+
2015-10-19 Kubo Takehiro <kubo@jiubao.org>
|
34
|
+
* ext/oci8/extconf.rb: Use macros OCI_MAJOR_VERSION and OCI_MINOR_VERSION
|
35
|
+
in oci.h to check the target Oracle client version.
|
36
|
+
|
37
|
+
2015-10-12 Kubo Takehiro <kubo@jiubao.org>
|
38
|
+
* NEWS: Add changes between 2.2.0.1 and 2.2.0.2.
|
39
|
+
|
1
40
|
2015-10-12 Kubo Takehiro <kubo@jiubao.org>
|
2
41
|
* lib/oci8/version.rb: Update the version to 2.2.0.2 to
|
3
42
|
release binary gems for mingw32.
|
data/NEWS
CHANGED
@@ -1,10 +1,47 @@
|
|
1
1
|
# @markup markdown
|
2
2
|
|
3
|
+
2.2.1
|
4
|
+
=====
|
5
|
+
|
6
|
+
New Features
|
7
|
+
------------
|
8
|
+
|
9
|
+
### Add OCI8::Metadata::Boolean
|
10
|
+
|
11
|
+
Support boolean type binding. This feature requires Oracle 12c client and server.
|
12
|
+
This doens't work when either Oracle server or client is 11g or lower.
|
13
|
+
|
14
|
+
Fixed Issues
|
15
|
+
------------
|
16
|
+
|
17
|
+
The following two issues were introduced in ruby-oci8 2.2.0.
|
18
|
+
|
19
|
+
### Fix handle leaks in OCI8#ping
|
20
|
+
|
21
|
+
This bug affects Oracle 10gR1 client only.
|
22
|
+
|
23
|
+
### Fix potential segmentation fault on ruby process termination
|
24
|
+
|
25
|
+
Other Changes
|
26
|
+
-------------
|
27
|
+
|
28
|
+
- Reduce compilation time by dropping unnecessary checks.
|
29
|
+
|
30
|
+
- Delete unused code which was added to support old Oracle and ruby 1.8.
|
31
|
+
|
32
|
+
2.2.0.2
|
33
|
+
=======
|
34
|
+
|
35
|
+
Nothing was changed except the version.
|
36
|
+
|
37
|
+
The forth version was incremented to release binary gems for mingw32.
|
38
|
+
The binary gems for 2.2.0.1 didn't work by faultily packaging.
|
39
|
+
|
3
40
|
2.2.0.1
|
4
41
|
=======
|
5
42
|
|
6
43
|
If ruby-oci8 2.2.0 is installed, you have no need to update it to
|
7
|
-
2.2.0.1. Source code itself was not
|
44
|
+
2.2.0.1. Source code itself was not changed between 2.2.0 and 2.2.0.1.
|
8
45
|
|
9
46
|
### Change the required ruby version in the ruby-oci8 gem
|
10
47
|
|
data/ext/oci8/apiwrap.yml
CHANGED
@@ -811,30 +811,6 @@ OCIStmtFetch_nb:
|
|
811
811
|
- ub2 orientation
|
812
812
|
- ub4 mode
|
813
813
|
|
814
|
-
OCIStmtGetPieceInfo:
|
815
|
-
:version: 800
|
816
|
-
:args:
|
817
|
-
- OCIStmt *stmtp
|
818
|
-
- OCIError *errhp
|
819
|
-
- dvoid **hndlpp
|
820
|
-
- ub4 *typep
|
821
|
-
- ub1 *in_outp
|
822
|
-
- ub4 *iterp
|
823
|
-
- ub4 *idxp
|
824
|
-
- ub1 *piecep
|
825
|
-
|
826
|
-
OCIStmtSetPieceInfo:
|
827
|
-
:version: 800
|
828
|
-
:args:
|
829
|
-
- dvoid *hndlp
|
830
|
-
- ub4 type
|
831
|
-
- OCIError *errhp
|
832
|
-
- CONST dvoid *bufp
|
833
|
-
- ub4 *alenp
|
834
|
-
- ub1 piece
|
835
|
-
- CONST dvoid *indp
|
836
|
-
- ub2 *rcodep
|
837
|
-
|
838
814
|
# round trip: 0
|
839
815
|
OCIStringAssignText:
|
840
816
|
:version: 800
|
@@ -1003,26 +979,6 @@ OCINumberIsInt:
|
|
1003
979
|
- OCIError *err
|
1004
980
|
- CONST OCINumber *number
|
1005
981
|
- boolean *result
|
1006
|
-
:code_if_not_found: |
|
1007
|
-
/* pseude code
|
1008
|
-
* work = trunc(number);
|
1009
|
-
* if (number == work) {
|
1010
|
-
* result = TRUE;
|
1011
|
-
* } else {
|
1012
|
-
* result = FALSE;
|
1013
|
-
* }
|
1014
|
-
*/
|
1015
|
-
OCINumber work;
|
1016
|
-
sword rv;
|
1017
|
-
sword cmp;
|
1018
|
-
rv = oci8_OCINumberTrunc(err, number, 0, &work, file, line);
|
1019
|
-
if (rv != OCI_SUCCESS)
|
1020
|
-
return rv;
|
1021
|
-
rv = oci8_OCINumberCmp(err, number, &work, &cmp, file, line);
|
1022
|
-
if (rv != OCI_SUCCESS)
|
1023
|
-
return rv;
|
1024
|
-
*result = (cmp == 0) ? TRUE : FALSE;
|
1025
|
-
return OCI_SUCCESS;
|
1026
982
|
|
1027
983
|
# round trip: 0
|
1028
984
|
OCINumberPrec:
|
@@ -1040,13 +996,6 @@ OCINumberSetPi:
|
|
1040
996
|
:args:
|
1041
997
|
- OCIError *err
|
1042
998
|
- OCINumber *num
|
1043
|
-
:code_if_not_found: |
|
1044
|
-
static const OCINumber pi = {
|
1045
|
-
{0x15, 0xc1, 0x04, 0x0f, 0x10, 0x5d, 0x42, 0x24, 0x5a, 0x50,
|
1046
|
-
0x21, 0x27, 0x2f, 0x1b, 0x2c, 0x27, 0x21, 0x50, 0x33, 0x1d,
|
1047
|
-
0x55, 0x15}
|
1048
|
-
};
|
1049
|
-
*num = pi;
|
1050
999
|
|
1051
1000
|
# round trip: 0
|
1052
1001
|
OCINumberShift:
|
@@ -1064,31 +1013,6 @@ OCINumberSign:
|
|
1064
1013
|
- OCIError *err
|
1065
1014
|
- CONST OCINumber *number
|
1066
1015
|
- sword *result
|
1067
|
-
:code_if_not_found: |
|
1068
|
-
/* pseude code
|
1069
|
-
* number <=> 0
|
1070
|
-
*/
|
1071
|
-
OCINumber zero;
|
1072
|
-
sword rv;
|
1073
|
-
sword cmp;
|
1074
|
-
OCINumberSetZero(err, &zero);
|
1075
|
-
rv = oci8_OCINumberCmp(err, number, &zero, &cmp, file, line);
|
1076
|
-
if (rv != OCI_SUCCESS)
|
1077
|
-
return rv;
|
1078
|
-
if (cmp > 0)
|
1079
|
-
*result = 1;
|
1080
|
-
else if (cmp < 0)
|
1081
|
-
*result = -1;
|
1082
|
-
else
|
1083
|
-
*result = 0;
|
1084
|
-
return OCI_SUCCESS;
|
1085
|
-
|
1086
|
-
# round trip: 0
|
1087
|
-
OCIReset:
|
1088
|
-
:version: 810
|
1089
|
-
:args:
|
1090
|
-
- dvoid *hndlp
|
1091
|
-
- OCIError *errhp
|
1092
1016
|
|
1093
1017
|
#
|
1094
1018
|
# Oracle 9.0
|
@@ -1160,16 +1084,6 @@ OCIDateTimeGetTime:
|
|
1160
1084
|
- ub1 *ss
|
1161
1085
|
- ub4 *fsec
|
1162
1086
|
|
1163
|
-
# round trip: 0 (not docmented. I guess.)
|
1164
|
-
OCIIntervalFromText:
|
1165
|
-
:version: 900
|
1166
|
-
:args:
|
1167
|
-
- dvoid *hndl
|
1168
|
-
- OCIError *err
|
1169
|
-
- CONST OraText *inpstr
|
1170
|
-
- size_t str_len
|
1171
|
-
- OCIInterval *result
|
1172
|
-
|
1173
1087
|
# round trip: 0 (not docmented. I guess.)
|
1174
1088
|
OCIDateTimeGetTimeZoneOffset:
|
1175
1089
|
:version: 900
|
@@ -1378,25 +1292,6 @@ OCIClientVersion:
|
|
1378
1292
|
- sword *patch_num
|
1379
1293
|
- sword *port_update_num
|
1380
1294
|
|
1381
|
-
# round trip: 1
|
1382
|
-
OCIDBStartup_nb:
|
1383
|
-
:version: 1020
|
1384
|
-
:args:
|
1385
|
-
- OCISvcCtx *svchp
|
1386
|
-
- OCIError *errhp
|
1387
|
-
- OCIAdmin *admhp
|
1388
|
-
- ub4 mode
|
1389
|
-
- ub4 flags
|
1390
|
-
|
1391
|
-
# round trip: 1
|
1392
|
-
OCIDBShutdown_nb:
|
1393
|
-
:version: 1020
|
1394
|
-
:args:
|
1395
|
-
- OCISvcCtx *svchp
|
1396
|
-
- OCIError *errhp
|
1397
|
-
- OCIAdmin *admhp
|
1398
|
-
- ub4 mode
|
1399
|
-
|
1400
1295
|
# round trip: 1
|
1401
1296
|
OCIPing_nb:
|
1402
1297
|
:version: 1020
|
@@ -1404,23 +1299,3 @@ OCIPing_nb:
|
|
1404
1299
|
- OCISvcCtx *svchp
|
1405
1300
|
- OCIError *errhp
|
1406
1301
|
- ub4 mode
|
1407
|
-
|
1408
|
-
#
|
1409
|
-
# Oracle 11.1
|
1410
|
-
#
|
1411
|
-
|
1412
|
-
OCIArrayDescriptorAlloc:
|
1413
|
-
:version: 1110
|
1414
|
-
:args:
|
1415
|
-
- const void *parenth
|
1416
|
-
- void **descpp
|
1417
|
-
- const ub4 type
|
1418
|
-
- ub4 array_size
|
1419
|
-
- const size_t xtramem_sz
|
1420
|
-
- void **usrmempp
|
1421
|
-
|
1422
|
-
OCIArrayDescriptorFree:
|
1423
|
-
:version: 1110
|
1424
|
-
:args:
|
1425
|
-
- void **descp
|
1426
|
-
- const ub4 type
|
data/ext/oci8/bind.c
CHANGED
@@ -224,9 +224,6 @@ static void bind_binary_double_init(oci8_bind_t *obind, VALUE svc, VALUE val, VA
|
|
224
224
|
obind->alloc_sz = sizeof(double);
|
225
225
|
}
|
226
226
|
|
227
|
-
#ifndef SQLT_BDOUBLE
|
228
|
-
#define SQLT_BDOUBLE 22
|
229
|
-
#endif
|
230
227
|
static const oci8_bind_data_type_t bind_binary_double_data_type = {
|
231
228
|
{
|
232
229
|
{
|
@@ -257,6 +254,58 @@ static VALUE bind_binary_double_alloc(VALUE klass)
|
|
257
254
|
return oci8_allocate_typeddata(klass, &bind_binary_double_data_type.base);
|
258
255
|
}
|
259
256
|
|
257
|
+
/*
|
258
|
+
* bind_boolean
|
259
|
+
*/
|
260
|
+
static VALUE bind_boolean_get(oci8_bind_t *obind, void *data, void *null_struct)
|
261
|
+
{
|
262
|
+
return *(int*)data ? Qtrue : Qfalse;
|
263
|
+
}
|
264
|
+
|
265
|
+
static void bind_boolean_set(oci8_bind_t *obind, void *data, void **null_structp, VALUE val)
|
266
|
+
{
|
267
|
+
*(int*)data = RTEST(val) ? -1 : 0;
|
268
|
+
}
|
269
|
+
|
270
|
+
static void bind_boolean_init(oci8_bind_t *obind, VALUE svc, VALUE val, VALUE length)
|
271
|
+
{
|
272
|
+
obind->value_sz = sizeof(int);
|
273
|
+
obind->alloc_sz = sizeof(int);
|
274
|
+
}
|
275
|
+
|
276
|
+
#ifndef SQLT_BOL
|
277
|
+
#define SQLT_BOL 252
|
278
|
+
#endif
|
279
|
+
static const oci8_bind_data_type_t bind_boolean_data_type = {
|
280
|
+
{
|
281
|
+
{
|
282
|
+
"OCI8::BindType::Boolean",
|
283
|
+
{
|
284
|
+
NULL,
|
285
|
+
oci8_handle_cleanup,
|
286
|
+
oci8_handle_size,
|
287
|
+
},
|
288
|
+
&oci8_bind_data_type.rb_data_type, NULL,
|
289
|
+
#ifdef RUBY_TYPED_WB_PROTECTED
|
290
|
+
RUBY_TYPED_WB_PROTECTED,
|
291
|
+
#endif
|
292
|
+
},
|
293
|
+
oci8_bind_free,
|
294
|
+
sizeof(oci8_bind_t)
|
295
|
+
},
|
296
|
+
bind_boolean_get,
|
297
|
+
bind_boolean_set,
|
298
|
+
bind_boolean_init,
|
299
|
+
NULL,
|
300
|
+
NULL,
|
301
|
+
SQLT_BOL,
|
302
|
+
};
|
303
|
+
|
304
|
+
static VALUE bind_boolean_alloc(VALUE klass)
|
305
|
+
{
|
306
|
+
return oci8_allocate_typeddata(klass, &bind_boolean_data_type.base);
|
307
|
+
}
|
308
|
+
|
260
309
|
static VALUE oci8_bind_get(VALUE self)
|
261
310
|
{
|
262
311
|
oci8_bind_t *obind = TO_BIND(self);
|
@@ -422,4 +471,7 @@ void Init_oci8_bind(VALUE klass)
|
|
422
471
|
oci8_define_bind_class("String", &bind_string_data_type, bind_string_alloc);
|
423
472
|
oci8_define_bind_class("RAW", &bind_raw_data_type, bind_raw_alloc);
|
424
473
|
oci8_define_bind_class("BinaryDouble", &bind_binary_double_data_type, bind_binary_double_alloc);
|
474
|
+
if (oracle_client_version >= ORAVER_12_1) {
|
475
|
+
oci8_define_bind_class("Boolean", &bind_boolean_data_type, bind_boolean_alloc);
|
476
|
+
}
|
425
477
|
}
|
data/ext/oci8/extconf.rb
CHANGED
@@ -25,77 +25,44 @@ $CFLAGS += oraconf.cflags
|
|
25
25
|
saved_libs = $libs
|
26
26
|
$libs += oraconf.libs
|
27
27
|
|
28
|
-
oci_actual_client_version = 0x08000000
|
29
|
-
funcs = {}
|
30
|
-
YAML.load(open(File.dirname(__FILE__) + '/apiwrap.yml')).each do |key, val|
|
31
|
-
key = key[0..-4] if key[-3..-1] == '_nb'
|
32
|
-
ver = val[:version]
|
33
|
-
ver_major = (ver / 100)
|
34
|
-
ver_minor = (ver / 10) % 10
|
35
|
-
ver_update = ver % 10
|
36
|
-
ver = ((ver_major << 24) | (ver_minor << 20) | (ver_update << 12))
|
37
|
-
funcs[ver] ||= []
|
38
|
-
funcs[ver] << key
|
39
|
-
end
|
40
|
-
|
41
28
|
saved_defs = $defs.clone
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
29
|
+
fmt = "%s"
|
30
|
+
def fmt.%(x)
|
31
|
+
x ? super : "failed"
|
32
|
+
end
|
33
|
+
oci_major_version = checking_for 'OCI_MAJOR_VERSION in oci.h', fmt do
|
34
|
+
try_constant('OCI_MAJOR_VERSION', 'oci.h')
|
35
|
+
end
|
36
|
+
if oci_major_version
|
37
|
+
oci_minor_version = checking_for 'OCI_MINOR_VERSION in oci.h', fmt do
|
38
|
+
try_constant('OCI_MINOR_VERSION', 'oci.h')
|
39
|
+
end
|
40
|
+
else
|
41
|
+
if have_func('OCILobGetLength2')
|
42
|
+
oci_major_version = 10
|
43
|
+
oci_minor_version = 1
|
44
|
+
elsif have_func('OCIStmtPrepare2')
|
45
|
+
raise "Ruby-oci8 #{OCI8::VERSION} doesn't support Oracle 9iR2. Use ruby-oci8 2.1.x instead."
|
46
|
+
elsif have_func('OCILogon2')
|
47
|
+
raise "Ruby-oci8 #{OCI8::VERSION} doesn't support Oracle 9iR1. Use ruby-oci8 2.1.x instead."
|
48
|
+
elsif have_func('OCIEnvCreate')
|
49
|
+
raise "Ruby-oci8 #{OCI8::VERSION} doesn't support Oracle 8i. Use ruby-oci8 2.0.x instead."
|
50
|
+
else
|
51
|
+
raise "Ruby-oci8 #{OCI8::VERSION} doesn't support Oracle 8. Use ruby-oci8 2.0.x instead."
|
54
52
|
end
|
55
|
-
puts "checking for Oracle #{verstr} API - #{result}"
|
56
|
-
break if result == 'fail'
|
57
53
|
end
|
58
54
|
$defs = saved_defs
|
59
55
|
|
60
|
-
have_type('oratext', 'ociap.h')
|
61
|
-
have_type('OCIDateTime*', 'ociap.h')
|
62
|
-
have_type('OCIInterval*', 'ociap.h')
|
63
|
-
have_type('OCICallbackLobRead2', 'ociap.h')
|
64
|
-
have_type('OCICallbackLobWrite2', 'ociap.h')
|
65
|
-
have_type('OCIAdmin*', 'ociap.h')
|
66
|
-
have_type('OCIAuthInfo*', 'ociap.h')
|
67
|
-
have_type('OCIMsg*', 'ociap.h')
|
68
|
-
have_type('OCICPool*', 'ociap.h')
|
69
|
-
|
70
56
|
if with_config('oracle-version')
|
71
|
-
|
57
|
+
oraver = OCI8::OracleVersion.new(with_config('oracle-version'))
|
72
58
|
else
|
73
|
-
|
59
|
+
oraver = OCI8::OracleVersion.new(oci_major_version, oci_minor_version)
|
74
60
|
end
|
75
|
-
$defs << "-DORACLE_CLIENT_VERSION=#{format('0x%08x',
|
61
|
+
$defs << "-DORACLE_CLIENT_VERSION=#{format('0x%08x', oraver.to_i)}"
|
76
62
|
|
77
63
|
if with_config('runtime-check')
|
78
64
|
$defs << "-DRUNTIME_API_CHECK=1"
|
79
65
|
$libs = saved_libs
|
80
|
-
else
|
81
|
-
oraver = OCI8::OracleVersion.new(oci_client_version)
|
82
|
-
if oraver < OCI8::OracleVersion.new(10)
|
83
|
-
case "#{oraver.major}.#{oraver.minor}"
|
84
|
-
when "8.0"
|
85
|
-
ora_name = "Oracle 8"
|
86
|
-
oci8_ver = "2.0.x"
|
87
|
-
when "8.1"
|
88
|
-
ora_name = "Oracle 8i"
|
89
|
-
oci8_ver = "2.0.x"
|
90
|
-
when "9.1"
|
91
|
-
ora_name = "Oracle 9iR1"
|
92
|
-
oci8_ver = "2.1.x"
|
93
|
-
when "9.2"
|
94
|
-
ora_name = "Oracle 9iR2"
|
95
|
-
oci8_ver = "2.1.x"
|
96
|
-
end
|
97
|
-
raise "Ruby-oci8 #{OCI8::VERSION} doesn't support #{ora_name}. Use ruby-oci8 #{oci8_ver} instead."
|
98
|
-
end
|
99
66
|
end
|
100
67
|
|
101
68
|
$objs = ["oci8lib.o", "env.o", "error.o", "oci8.o", "ocihandle.o",
|
data/ext/oci8/oci8.h
CHANGED
@@ -58,38 +58,6 @@ typedef oraub8 ub8;
|
|
58
58
|
typedef orasb8 sb8;
|
59
59
|
#endif /* ORAXB8_DEFINED */
|
60
60
|
|
61
|
-
#ifndef HAVE_TYPE_ORATEXT
|
62
|
-
typedef unsigned char oratext;
|
63
|
-
#endif
|
64
|
-
#if !defined HAVE_TYPE_OCIDATETIME_ && !defined HAVE_TYPE_OCIDATETIMEP
|
65
|
-
typedef struct OCIDateTime OCIDateTime;
|
66
|
-
#endif
|
67
|
-
#if !defined HAVE_TYPE_OCIINTERVAL_ && !defined HAVE_TYPE_OCIINTERVALP
|
68
|
-
typedef struct OCIInterval OCIInterval;
|
69
|
-
#endif
|
70
|
-
#ifndef HAVE_TYPE_OCICALLBACKLOBREAD2
|
71
|
-
typedef sb4 (*OCICallbackLobRead2)(dvoid *ctxp, CONST dvoid *bufp, oraub8 len,
|
72
|
-
ub1 piece, dvoid **changed_bufpp,
|
73
|
-
oraub8 *changed_lenp);
|
74
|
-
#endif
|
75
|
-
#ifndef HAVE_TYPE_OCICALLBACKLOBWRITE2
|
76
|
-
typedef sb4 (*OCICallbackLobWrite2)(dvoid *ctxp, dvoid *bufp, oraub8 *lenp,
|
77
|
-
ub1 *piece, dvoid **changed_bufpp,
|
78
|
-
oraub8 *changed_lenp);
|
79
|
-
#endif
|
80
|
-
#if !defined HAVE_TYPE_OCIADMIN_ && !defined HAVE_TYPE_OCIADMINP
|
81
|
-
typedef struct OCIAdmin OCIAdmin;
|
82
|
-
#endif
|
83
|
-
#if !defined HAVE_TYPE_OCIAUTHINFO_ && !defined HAVE_TYPE_OCIAUTHINFOP
|
84
|
-
typedef struct OCIAuthInfo OCIAuthInfo;
|
85
|
-
#endif
|
86
|
-
#if !defined HAVE_TYPE_OCIMSG_ && !defined HAVE_TYPE_OCIMSGP
|
87
|
-
typedef struct OCIMsg OCIMsg;
|
88
|
-
#endif
|
89
|
-
#if !defined HAVE_TYPE_OCICPOOL_ && !defined HAVE_TYPE_OCICPOOLP
|
90
|
-
typedef struct OCICPool OCICPool;
|
91
|
-
#endif
|
92
|
-
|
93
61
|
#if defined RBX_CAPI_RUBY_H
|
94
62
|
/* rubinius 2.0 */
|
95
63
|
#ifndef HAVE_RB_ENC_STR_BUF_CAT
|
data/ext/oci8/oci8lib.c
CHANGED
@@ -54,7 +54,6 @@ void oci8_base_free(oci8_base_t *base)
|
|
54
54
|
base->hp.ptr = NULL;
|
55
55
|
}
|
56
56
|
|
57
|
-
#ifdef HAVE_RB_SET_END_PROC
|
58
57
|
static void at_exit_func(VALUE val)
|
59
58
|
{
|
60
59
|
oci8_in_finalizer = 1;
|
@@ -62,7 +61,6 @@ static void at_exit_func(VALUE val)
|
|
62
61
|
oci8_shutdown_sockets();
|
63
62
|
#endif
|
64
63
|
}
|
65
|
-
#endif
|
66
64
|
|
67
65
|
static VALUE bind_base_alloc(VALUE klass)
|
68
66
|
{
|
@@ -118,9 +116,7 @@ Init_oci8lib()
|
|
118
116
|
oci8_id_mul_op = rb_intern("*");
|
119
117
|
oci8_id_div_op = rb_intern("/");
|
120
118
|
#endif
|
121
|
-
#ifdef HAVE_RB_SET_END_PROC
|
122
119
|
rb_set_end_proc(at_exit_func, Qnil);
|
123
|
-
#endif
|
124
120
|
|
125
121
|
Init_oci8_thread_util();
|
126
122
|
Init_oci8_error();
|
@@ -385,10 +381,6 @@ static VALUE exec_sql(cb_arg_t *arg)
|
|
385
381
|
ub4 pos;
|
386
382
|
sword rv;
|
387
383
|
|
388
|
-
rv = OCIHandleAlloc(oci8_envhp, (dvoid*)&arg->stmtp, OCI_HTYPE_STMT, 0, NULL);
|
389
|
-
if (rv != OCI_SUCCESS) {
|
390
|
-
oci8_env_raise(oci8_envhp, rv);
|
391
|
-
}
|
392
384
|
chker2(OCIStmtPrepare2(arg->svcctx->base.hp.svc, &arg->stmtp, oci8_errhp,
|
393
385
|
(text*)arg->sql_text, strlen(arg->sql_text), NULL, 0,
|
394
386
|
OCI_NTV_SYNTAX, OCI_DEFAULT),
|
data/ext/oci8/ocinumber.c
CHANGED
@@ -23,10 +23,8 @@ static ID id_finite_p;
|
|
23
23
|
static ID id_split;
|
24
24
|
static ID id_numerator;
|
25
25
|
static ID id_denominator;
|
26
|
-
static ID id_Rational;
|
27
26
|
static ID id_BigDecimal;
|
28
27
|
|
29
|
-
static VALUE cRational;
|
30
28
|
static VALUE cBigDecimal;
|
31
29
|
|
32
30
|
static VALUE cOCINumber;
|
@@ -51,19 +49,6 @@ static int rboci8_type(VALUE obj)
|
|
51
49
|
VALUE klass;
|
52
50
|
|
53
51
|
switch (type) {
|
54
|
-
case T_OBJECT:
|
55
|
-
klass = CLASS_OF(obj);
|
56
|
-
if (cRational != 0) {
|
57
|
-
if (klass == cRational) {
|
58
|
-
return T_RATIONAL;
|
59
|
-
}
|
60
|
-
} else {
|
61
|
-
if (strcmp(rb_class2name(klass), "Rational") == 0) {
|
62
|
-
cRational = rb_const_get(rb_cObject, id_Rational);
|
63
|
-
return T_RATIONAL;
|
64
|
-
}
|
65
|
-
}
|
66
|
-
break;
|
67
52
|
case T_DATA:
|
68
53
|
klass = CLASS_OF(obj);
|
69
54
|
if (klass == cOCINumber) {
|
@@ -1805,7 +1790,6 @@ Init_oci_number(VALUE cOCI8, OCIError *errhp)
|
|
1805
1790
|
id_split = rb_intern("split");
|
1806
1791
|
id_numerator = rb_intern("numerator");
|
1807
1792
|
id_denominator = rb_intern("denominator");
|
1808
|
-
id_Rational = rb_intern("Rational");
|
1809
1793
|
id_BigDecimal = rb_intern("BigDecimal");
|
1810
1794
|
|
1811
1795
|
cOCINumber = rb_define_class("OraNumber", rb_cNumeric);
|
data/ext/oci8/oraconf.rb
CHANGED
@@ -696,7 +696,7 @@ EOS
|
|
696
696
|
original_libs = $libs
|
697
697
|
begin
|
698
698
|
$libs += " -L#{CONFIG['libdir']} " + @libs
|
699
|
-
have_func("
|
699
|
+
have_func("OCIEnvCreate", "oci.h")
|
700
700
|
ensure
|
701
701
|
$libs = original_libs
|
702
702
|
end
|
@@ -708,11 +708,12 @@ EOS
|
|
708
708
|
case RUBY_PLATFORM
|
709
709
|
when /cygwin|x64-mingw32/
|
710
710
|
regex = ([nil].pack('P').size == 8) ? / T (OCI\w+)/ : / T _(OCI\w+)/
|
711
|
+
oci_funcs = YAML.load(open(File.dirname(__FILE__) + '/apiwrap.yml'))
|
711
712
|
open("OCI.def", "w") do |f|
|
712
713
|
f.puts("EXPORTS")
|
713
714
|
open("|nm #{lib_dir}/MSVC/OCI.LIB") do |r|
|
714
715
|
while line = r.gets
|
715
|
-
f.puts($1) if regex =~ line
|
716
|
+
f.puts($1) if regex =~ line and oci_funcs.include?($1)
|
716
717
|
end
|
717
718
|
end
|
718
719
|
end
|
data/lib/oci8/bindtype.rb
CHANGED
@@ -216,6 +216,10 @@ OCI8::BindType::Mapping[OCI8::NCLOB] = OCI8::BindType::NCLOB
|
|
216
216
|
OCI8::BindType::Mapping[OCI8::BLOB] = OCI8::BindType::BLOB
|
217
217
|
OCI8::BindType::Mapping[OCI8::BFILE] = OCI8::BindType::BFILE
|
218
218
|
OCI8::BindType::Mapping[OCI8::Cursor] = OCI8::BindType::Cursor
|
219
|
+
if defined? OCI8::BindType::Boolean
|
220
|
+
OCI8::BindType::Mapping[TrueClass] = OCI8::BindType::Boolean
|
221
|
+
OCI8::BindType::Mapping[FalseClass] = OCI8::BindType::Boolean
|
222
|
+
end
|
219
223
|
|
220
224
|
# implicitly define
|
221
225
|
|
data/lib/oci8/oci8.rb
CHANGED
@@ -351,22 +351,7 @@ class OCI8
|
|
351
351
|
# @see OCI8.oracle_client_version
|
352
352
|
# @return [OCI8::OracleVersion]
|
353
353
|
def oracle_server_version
|
354
|
-
|
355
|
-
if vernum = oracle_server_vernum
|
356
|
-
# If the Oracle client is Oracle 9i or upper,
|
357
|
-
# get the server version from the OCI function OCIServerRelease.
|
358
|
-
@oracle_server_version = OCI8::OracleVersion.new(vernum)
|
359
|
-
else
|
360
|
-
# Otherwise, get it from v$version.
|
361
|
-
self.exec('select banner from v$version') do |row|
|
362
|
-
if /^Oracle.*?(\d+\.\d+\.\d+\.\d+\.\d+)/ =~ row[0]
|
363
|
-
@oracle_server_version = OCI8::OracleVersion.new($1)
|
364
|
-
break
|
365
|
-
end
|
366
|
-
end
|
367
|
-
end
|
368
|
-
end
|
369
|
-
@oracle_server_version
|
354
|
+
@oracle_server_version ||= OCI8::OracleVersion.new(oracle_server_vernum)
|
370
355
|
end
|
371
356
|
|
372
357
|
# Returns the Oracle database character set name such as AL32UTF8.
|
data/lib/oci8/version.rb
CHANGED
data/test/test_all.rb
CHANGED
metadata
CHANGED
@@ -5,9 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 2
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 2.2.0.2
|
8
|
+
- 1
|
9
|
+
version: 2.2.1
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Kubo Takehiro
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2015-
|
17
|
+
date: 2015-11-01 00:00:00 +09:00
|
19
18
|
default_executable:
|
20
19
|
dependencies: []
|
21
20
|
|