ruby-oci8 2.2.10 → 2.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ChangeLog +2 -0
- data/NEWS +16 -0
- data/ext/oci8/extconf.rb +2 -2
- data/ext/oci8/hook_funcs.c +37 -16
- data/ext/oci8/oci8.h +1 -83
- data/ext/oci8/oci8lib.c +1 -1
- data/ext/oci8/ocihandle.c +1 -1
- data/ext/oci8/ocinumber.c +1 -2
- data/lib/oci8/check_load_error.rb +1 -1
- data/lib/oci8/version.rb +1 -1
- data/pre-distclean.rb +1 -3
- data/test/test_object.rb +0 -6
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c98e1080c073f6f2f2a67676f754259e8c20d2ef95d6abbb1015fd62df569d84
|
4
|
+
data.tar.gz: 4a14e505c268c3a2b408c9f4881026dd32bbe6e4276df83c77483e0402bb32b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e73a635ede56087026f6b573c2f1f6624d7a265423a91ab1d7592534f6c132a1e4f1ca812e4a2651f690588f39c8c82040d20fcc9719fa0028a67c230e76e1d
|
7
|
+
data.tar.gz: 57497720f51ed3d2062ed8dc5eb07b248d3b19326e7c83a2cd508aaec0e7f3d33b658eb0605134776913cffc631e57b9e6b97d8b6367e5cf59dd83d24e0c749d
|
data/ChangeLog
CHANGED
data/NEWS
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# @markup markdown
|
2
2
|
|
3
|
+
2.2.12 (2022-12-30)
|
4
|
+
===================
|
5
|
+
|
6
|
+
- Fix warning: undefining the allocator of T_DATA class OraNumber against Ruby 3.2.0dev. (GH-243)
|
7
|
+
- Fix warnings on tests and on compile.
|
8
|
+
- Remove code for old ruby versions.
|
9
|
+
|
10
|
+
2.2.11 (2022-02-22)
|
11
|
+
===================
|
12
|
+
|
13
|
+
- Fix "No DLL is not foud to hook" when `OCI8.properties[:tcp_keepalive_time]` is set and Oracle client is 21c on Windows.
|
14
|
+
|
15
|
+
(reported at rsim/oracle-enhanced#2262)
|
16
|
+
|
17
|
+
- Fix "OCI8.properties[:tcp_keepalive_time] isn't available" error when ruby version is 3.1 on Windows.
|
18
|
+
|
3
19
|
2.2.10 (2022-01-12)
|
4
20
|
===================
|
5
21
|
|
data/ext/oci8/extconf.rb
CHANGED
@@ -72,7 +72,7 @@ $objs = ["oci8lib.o", "env.o", "error.o", "oci8.o", "ocihandle.o",
|
|
72
72
|
"ocinumber.o", "ocidatetime.o", "object.o", "apiwrap.o",
|
73
73
|
"encoding.o", "oranumber_util.o", "thread_util.o", "util.o"]
|
74
74
|
|
75
|
-
if RUBY_PLATFORM =~ /mswin32|cygwin|
|
75
|
+
if RUBY_PLATFORM =~ /mswin32|cygwin|mingw/
|
76
76
|
$defs << "-DUSE_WIN32_C"
|
77
77
|
$objs << "win32.o"
|
78
78
|
end
|
@@ -148,7 +148,7 @@ end
|
|
148
148
|
print "checking for plthook... "
|
149
149
|
STDOUT.flush
|
150
150
|
case RUBY_PLATFORM
|
151
|
-
when /mswin32|cygwin|
|
151
|
+
when /mswin32|cygwin|mingw/
|
152
152
|
plthook_src = "plthook_win32.c"
|
153
153
|
when /darwin/
|
154
154
|
plthook_src = "plthook_osx.c"
|
data/ext/oci8/hook_funcs.c
CHANGED
@@ -170,6 +170,38 @@ static int WSAAPI hook_WSARecv(SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount
|
|
170
170
|
return rv;
|
171
171
|
}
|
172
172
|
|
173
|
+
static int is_target_dll(MODULEENTRY32 *me)
|
174
|
+
{
|
175
|
+
static const char *basenames[] = {
|
176
|
+
"orantcp", // ORACLE_HOME-based client
|
177
|
+
"oraociei", // instant client basic
|
178
|
+
"oraociicus", // instant client basic lite
|
179
|
+
NULL,
|
180
|
+
};
|
181
|
+
const char **basename = basenames;
|
182
|
+
while (*basename != NULL) {
|
183
|
+
if (strnicmp(me->szModule, *basename, strlen(*basename)) == 0) {
|
184
|
+
break;
|
185
|
+
}
|
186
|
+
basename++;
|
187
|
+
}
|
188
|
+
if (*basename == NULL) {
|
189
|
+
return 0;
|
190
|
+
}
|
191
|
+
// basename{zero_or_more_digits}.dll
|
192
|
+
const char *p = me->szModule + strlen(*basename);
|
193
|
+
while ('0' <= *p && *p <= '9') {
|
194
|
+
p++;
|
195
|
+
}
|
196
|
+
if (stricmp(p, ".dll") != 0) {
|
197
|
+
return 0;
|
198
|
+
}
|
199
|
+
if (GetProcAddress((HMODULE)me->modBaseAddr, "nttini") == NULL) {
|
200
|
+
return 0;
|
201
|
+
}
|
202
|
+
return 1;
|
203
|
+
}
|
204
|
+
|
173
205
|
void oci8_install_hook_functions()
|
174
206
|
{
|
175
207
|
static int hook_functions_installed = 0;
|
@@ -217,22 +249,11 @@ void oci8_install_hook_functions()
|
|
217
249
|
me.dwSize = sizeof(me);
|
218
250
|
if (Module32First(hSnapshot, &me)) {
|
219
251
|
do {
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
} else if (strnicmp(me.szModule, "oraociicus", 10) == 0) { // instant client basic lite
|
226
|
-
p = me.szModule + 10;
|
227
|
-
}
|
228
|
-
if (p != NULL && ('1' <= *p && *p <= '9') && ('0' <= *(p + 1) && *(p + 1) <= '9')
|
229
|
-
&& stricmp(p + 2, ".dll") == 0) {
|
230
|
-
if (GetProcAddress((HMODULE)me.modBaseAddr, "nttini") != NULL) {
|
231
|
-
module_found = TRUE;
|
232
|
-
if (replace_functions(me.modBaseAddr, me.szExePath, tcp_functions) != 0) {
|
233
|
-
CloseHandle(hSnapshot);
|
234
|
-
rb_raise(rb_eRuntimeError, "Hook error: %s", hook_errmsg);
|
235
|
-
}
|
252
|
+
if (is_target_dll(&me)) {
|
253
|
+
module_found = TRUE;
|
254
|
+
if (replace_functions(me.modBaseAddr, me.szExePath, tcp_functions) != 0) {
|
255
|
+
CloseHandle(hSnapshot);
|
256
|
+
rb_raise(rb_eRuntimeError, "Hook error: %s", hook_errmsg);
|
236
257
|
}
|
237
258
|
}
|
238
259
|
} while (Module32Next(hSnapshot, &me));
|
data/ext/oci8/oci8.h
CHANGED
@@ -89,88 +89,6 @@ typedef orasb8 sb8;
|
|
89
89
|
#endif
|
90
90
|
#endif
|
91
91
|
|
92
|
-
/*
|
93
|
-
* Use TypedData on ruby 1.9.3 and later.
|
94
|
-
*/
|
95
|
-
#ifndef HAVE_RB_DATA_TYPE_T_FUNCTION
|
96
|
-
|
97
|
-
/*
|
98
|
-
* Don't use TypedData even though ruby 1.9.2 has it because the
|
99
|
-
* definitions are slightly different from ruby 1.9.3 and later.
|
100
|
-
*/
|
101
|
-
#define rb_data_type_t oci8_data_type_t
|
102
|
-
#undef TypedData_Make_Struct
|
103
|
-
#undef TypedData_Wrap_Struct
|
104
|
-
#undef TypedData_Get_Struct
|
105
|
-
#undef RTYPEDDATA_DATA
|
106
|
-
#undef RUBY_DEFAULT_FREE
|
107
|
-
|
108
|
-
/*
|
109
|
-
* To pass compilation on ruby 1.9.2 and earlier.
|
110
|
-
*/
|
111
|
-
typedef struct oci8_data_type_struct rb_data_type_t;
|
112
|
-
struct oci8_data_type_struct {
|
113
|
-
const char *wrap_struct_name;
|
114
|
-
struct {
|
115
|
-
void (*dmark)(void*);
|
116
|
-
void (*dfree)(void*);
|
117
|
-
size_t (*dsize)(const void *);
|
118
|
-
} function;
|
119
|
-
const rb_data_type_t *parent;
|
120
|
-
void *data;
|
121
|
-
};
|
122
|
-
#define TypedData_Make_Struct(klass, type, data_type, sval) \
|
123
|
-
Data_Make_Struct((klass), type, (data_type)->function.dmark, (data_type)->function.dfree, (sval))
|
124
|
-
#define TypedData_Wrap_Struct(klass, data_type, sval) \
|
125
|
-
Data_Wrap_Struct((klass), (data_type)->function.dmark, (data_type)->function.dfree, (sval))
|
126
|
-
#define TypedData_Get_Struct(obj, type, data_type, sval) \
|
127
|
-
Data_Get_Struct((obj), type, (sval))
|
128
|
-
#define RTYPEDDATA_DATA(obj) DATA_PTR(obj)
|
129
|
-
#define RUBY_DEFAULT_FREE xfree
|
130
|
-
#endif
|
131
|
-
|
132
|
-
/* a new function in ruby 1.9.3.
|
133
|
-
* define a compatible macro for ruby 1.9.2 or lower.
|
134
|
-
*/
|
135
|
-
#ifndef HAVE_RB_CLASS_SUPERCLASS
|
136
|
-
#ifdef RCLASS_SUPER
|
137
|
-
#define rb_class_superclass(cls) RCLASS_SUPER(cls)
|
138
|
-
#else
|
139
|
-
#define rb_class_superclass(cls) (RCLASS(cls)->super)
|
140
|
-
#endif
|
141
|
-
#endif
|
142
|
-
|
143
|
-
/* new macros in ruby 2.1.0
|
144
|
-
*/
|
145
|
-
#ifndef RARRAY_AREF
|
146
|
-
#define RARRAY_AREF(a, i) (RARRAY_PTR(a)[i])
|
147
|
-
#endif
|
148
|
-
#ifndef RARRAY_CONST_PTR
|
149
|
-
#define RARRAY_CONST_PTR(a) RARRAY_PTR(a)
|
150
|
-
#endif
|
151
|
-
#ifndef RB_OBJ_WRITE
|
152
|
-
#define RB_OBJ_WRITE(a, slot, b) do {*(slot) = (b);} while (0)
|
153
|
-
#endif
|
154
|
-
#ifndef RB_OBJ_WRITTEN
|
155
|
-
#define RB_OBJ_WRITTEN(a, oldv, b) do {(void)oldv;} while (0)
|
156
|
-
#endif
|
157
|
-
|
158
|
-
/* new macros in ruby 2.4.0
|
159
|
-
*/
|
160
|
-
#ifndef ALWAYS_INLINE
|
161
|
-
#if defined(__GNUC__) && ((__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
|
162
|
-
/* gcc version >= 3.1 */
|
163
|
-
#define ALWAYS_INLINE(x) __attribute__((always_inline)) x
|
164
|
-
#endif
|
165
|
-
#ifdef _MSC_VER
|
166
|
-
/* microsoft c */
|
167
|
-
#define ALWAYS_INLINE(x) __forceinline x
|
168
|
-
#endif
|
169
|
-
#ifndef ALWAYS_INLINE
|
170
|
-
#define ALWAYS_INLINE(x) x
|
171
|
-
#endif
|
172
|
-
#endif /* ALWAYS_INLINE */
|
173
|
-
|
174
92
|
/* macros depends on the compiler.
|
175
93
|
* LIKELY(x) hint for the compiler that 'x' is 1(TRUE) in many cases.
|
176
94
|
* UNLIKELY(x) hint for the compiler that 'x' is 0(FALSE) in many cases.
|
@@ -382,7 +300,7 @@ OCIEnv *oci8_make_envhp(void);
|
|
382
300
|
extern oci8_tls_key_t oci8_tls_key; /* native thread key */
|
383
301
|
OCIError *oci8_make_errhp(void);
|
384
302
|
|
385
|
-
static inline OCIError *oci8_get_errhp()
|
303
|
+
static inline OCIError *oci8_get_errhp(void)
|
386
304
|
{
|
387
305
|
OCIError *errhp = (OCIError *)oci8_tls_get(oci8_tls_key);
|
388
306
|
return LIKELY(errhp != NULL) ? errhp : oci8_make_errhp();
|
data/ext/oci8/oci8lib.c
CHANGED
data/ext/oci8/ocihandle.c
CHANGED
@@ -217,7 +217,7 @@ static VALUE attr_get_common(int argc, VALUE *argv, VALUE self, enum datatype da
|
|
217
217
|
}
|
218
218
|
return rb_external_str_new_with_enc(v.charptr, size, oci8_encoding);
|
219
219
|
case DATATYPE_BINARY:
|
220
|
-
return
|
220
|
+
return rb_str_new(v.charptr, size);
|
221
221
|
case DATATYPE_INTEGER:
|
222
222
|
if (size > sizeof(onum.OCINumberPart) - 1) {
|
223
223
|
rb_raise(rb_eRuntimeError, "Too long size %u", size);
|
data/ext/oci8/ocinumber.c
CHANGED
@@ -1795,6 +1795,7 @@ Init_oci_number(VALUE cOCI8, OCIError *errhp)
|
|
1795
1795
|
id_BigDecimal = rb_intern("BigDecimal");
|
1796
1796
|
|
1797
1797
|
cOCINumber = rb_define_class("OraNumber", rb_cNumeric);
|
1798
|
+
rb_define_alloc_func(cOCINumber, onum_s_alloc);
|
1798
1799
|
mMath = rb_define_module_under(cOCI8, "Math");
|
1799
1800
|
|
1800
1801
|
/* constants for internal use. */
|
@@ -1844,8 +1845,6 @@ Init_oci_number(VALUE cOCI8, OCIError *errhp)
|
|
1844
1845
|
rb_define_module_function(mMath, "log10", omath_log10, 1);
|
1845
1846
|
rb_define_module_function(mMath, "sqrt", omath_sqrt, 1);
|
1846
1847
|
|
1847
|
-
rb_define_alloc_func(cOCINumber, onum_s_alloc);
|
1848
|
-
|
1849
1848
|
/* methods of OCI::Number */
|
1850
1849
|
rb_define_global_function("OraNumber", onum_f_new, -1);
|
1851
1850
|
rb_define_method(cOCINumber, "initialize", onum_initialize, -1);
|
data/lib/oci8/version.rb
CHANGED
data/pre-distclean.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
rm_f "#{curr_objdir}/
|
2
|
-
rm_f "#{curr_objdir}/ext/oci8/oci8lib_18.map"
|
3
|
-
rm_f "#{curr_objdir}/ext/oci8/oci8lib_191.map"
|
1
|
+
rm_f "#{curr_objdir}/ext/oci8/oci8lib_*.map"
|
4
2
|
if RUBY_PLATFORM =~ /cygwin/
|
5
3
|
rm_f "#{curr_objdir}/ext/oci8/OCI.def"
|
6
4
|
rm_f "#{curr_objdir}/ext/oci8/libOCI.a"
|
data/test/test_object.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-oci8
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kubo Takehiro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: 'ruby-oci8 is a ruby interface for Oracle using OCI8 API. It is available
|
14
14
|
with Oracle 10g or later including Oracle Instant Client.
|
@@ -152,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '0'
|
154
154
|
requirements: []
|
155
|
-
rubygems_version: 3.1
|
155
|
+
rubygems_version: 3.4.1
|
156
156
|
signing_key:
|
157
157
|
specification_version: 4
|
158
158
|
summary: Ruby interface for Oracle using OCI8 API
|