ruby-oci8 2.2.11 → 2.2.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog +2 -0
- data/NEWS +25 -0
- data/docs/hanging-after-inactivity.md +1 -1
- data/ext/oci8/extconf.rb +1 -0
- data/ext/oci8/oci8.c +2 -2
- data/ext/oci8/oci8.h +7 -88
- data/ext/oci8/oci8lib.c +1 -22
- data/ext/oci8/ocihandle.c +1 -1
- data/ext/oci8/ocinumber.c +1 -2
- data/ext/oci8/oraconf.rb +4 -0
- data/ext/oci8/oradate.c +0 -11
- data/ext/oci8/plthook_elf.c +312 -183
- data/ext/oci8/plthook_osx.c +649 -91
- data/ext/oci8/plthook_win32.c +39 -25
- data/lib/oci8/oracle_version.rb +9 -1
- data/lib/oci8/version.rb +1 -1
- data/lib/oci8.rb +2 -0
- data/pre-distclean.rb +1 -3
- data/test/test_metadata.rb +1 -0
- data/test/test_object.rb +0 -6
- data/test/test_oranumber.rb +3 -1
- data/test/test_package_type.rb +10 -4
- 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: 1db88cf1bfe7291cc597bd695db32ea0e730734650c3bdfd40b9295663d0ac5e
|
4
|
+
data.tar.gz: 96f6b1b9fff2ba6067421d588495298cb14b5d42aa1fe7d4257c18431fdca654
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da88c45ce3e73abb6cf30ad9633286204c3869a7b5e5f8e5acaeb90a824f7bb91d842c7da807e4639ff6993cf6d2bae96f9f5fe8cd64144f836eeca61c7fc85f
|
7
|
+
data.tar.gz: '088b13f4df8245aa95abdb2e2bf744c2088fa3fe87ffd5ffcdfedf0b43a724630d9a3603468269e6bf5790c4480d4e85a79a28af4db18bd05310b39c7dafed74'
|
data/ChangeLog
CHANGED
data/NEWS
CHANGED
@@ -1,5 +1,30 @@
|
|
1
1
|
# @markup markdown
|
2
2
|
|
3
|
+
2.2.13 (2024-07-27)
|
4
|
+
===================
|
5
|
+
|
6
|
+
- Binary gems for Windows x64 and x86 supports ruby 2.7 - 3.3 inclusive.
|
7
|
+
|
8
|
+
Fixed issues
|
9
|
+
------------
|
10
|
+
|
11
|
+
- Fix various issues about `OCI8.properties[:tcp_keepalive_time]` on macOS arm64. The feature was removed on the platform
|
12
|
+
and it raises `NotImplementedError` instead now.
|
13
|
+
- Fix SIGSEGV when using truffleruby. It seems to be caused by `xfree()` outside of ruby threads.
|
14
|
+
|
15
|
+
Changes
|
16
|
+
-------
|
17
|
+
|
18
|
+
- Change the format of fifth numeral of Oracle version number as two digit zero-padding number
|
19
|
+
when the Oracle version is 23 or upper. For example "23.4.0.24.05".
|
20
|
+
|
21
|
+
2.2.12 (2022-12-30)
|
22
|
+
===================
|
23
|
+
|
24
|
+
- Fix warning: undefining the allocator of T_DATA class OraNumber against Ruby 3.2.0dev. (GH-243)
|
25
|
+
- Fix warnings on tests and on compile.
|
26
|
+
- Remove code for old ruby versions.
|
27
|
+
|
3
28
|
2.2.11 (2022-02-22)
|
4
29
|
===================
|
5
30
|
|
data/ext/oci8/extconf.rb
CHANGED
data/ext/oci8/oci8.c
CHANGED
@@ -437,7 +437,7 @@ typedef struct {
|
|
437
437
|
|
438
438
|
static void *complex_logoff_prepare(oci8_svcctx_t *svcctx)
|
439
439
|
{
|
440
|
-
complex_logoff_arg_t *cla =
|
440
|
+
complex_logoff_arg_t *cla = malloc(sizeof(complex_logoff_arg_t));
|
441
441
|
cla->svchp = svcctx->base.hp.svc;
|
442
442
|
cla->usrhp = svcctx->usrhp;
|
443
443
|
cla->srvhp = svcctx->srvhp;
|
@@ -479,7 +479,7 @@ static void *complex_logoff_execute(void *arg)
|
|
479
479
|
if (cla->svchp != NULL) {
|
480
480
|
OCIHandleFree(cla->svchp, OCI_HTYPE_SVCCTX);
|
481
481
|
}
|
482
|
-
|
482
|
+
free(cla);
|
483
483
|
return (void*)(VALUE)rv;
|
484
484
|
}
|
485
485
|
|
data/ext/oci8/oci8.h
CHANGED
@@ -29,11 +29,12 @@ extern "C"
|
|
29
29
|
* hexadecimal -> dotted version number hexadecimal -> dotted version number
|
30
30
|
* 0c102304 -> 12.1.2.3.4 12012034 -> 18.1.2.3.4
|
31
31
|
* ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
|
32
|
-
* 0c ------------' | | | |
|
33
|
-
* 1 --------------' | | |
|
34
|
-
* 02 --------------' | |
|
35
|
-
* 3 ---------------' |
|
36
|
-
* 04 ---------------'
|
32
|
+
* 0c ------------' | | | | 8 bits 12 ------------' | | | | 8 bits
|
33
|
+
* 1 --------------' | | | 4 bits 01 -------------' | | | 8 bits
|
34
|
+
* 02 --------------' | | 8 bits 2 --------------' | | 4 bits
|
35
|
+
* 3 ---------------' | 4 bits 03 --------------' | 8 bits
|
36
|
+
* 04 ---------------' 8 bits 4 ---------------' 4 bits
|
37
|
+
* total 32 bits total 32 bits
|
37
38
|
*/
|
38
39
|
#define ORAVERNUM(major, minor, update, patch, port_update) \
|
39
40
|
(((major) >= 18) ? (((major) << 24) | ((minor) << 16) | ((update) << 12) | ((patch) << 4) | (port_update)) \
|
@@ -89,88 +90,6 @@ typedef orasb8 sb8;
|
|
89
90
|
#endif
|
90
91
|
#endif
|
91
92
|
|
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
93
|
/* macros depends on the compiler.
|
175
94
|
* LIKELY(x) hint for the compiler that 'x' is 1(TRUE) in many cases.
|
176
95
|
* UNLIKELY(x) hint for the compiler that 'x' is 0(FALSE) in many cases.
|
@@ -382,7 +301,7 @@ OCIEnv *oci8_make_envhp(void);
|
|
382
301
|
extern oci8_tls_key_t oci8_tls_key; /* native thread key */
|
383
302
|
OCIError *oci8_make_errhp(void);
|
384
303
|
|
385
|
-
static inline OCIError *oci8_get_errhp()
|
304
|
+
static inline OCIError *oci8_get_errhp(void)
|
386
305
|
{
|
387
306
|
OCIError *errhp = (OCIError *)oci8_tls_get(oci8_tls_key);
|
388
307
|
return LIKELY(errhp != NULL) ? errhp : oci8_make_errhp();
|
data/ext/oci8/oci8lib.c
CHANGED
@@ -191,7 +191,7 @@ static void rebind_internal_symbols(void)
|
|
191
191
|
__declspec(dllexport)
|
192
192
|
#endif
|
193
193
|
void
|
194
|
-
Init_oci8lib()
|
194
|
+
Init_oci8lib(void)
|
195
195
|
{
|
196
196
|
VALUE cOCI8;
|
197
197
|
OCIEnv *envhp = NULL;
|
@@ -675,28 +675,7 @@ void *oci8_find_symbol(const char *symbol_name)
|
|
675
675
|
|
676
676
|
void *oci8_check_typeddata(VALUE obj, const oci8_handle_data_type_t *data_type, int error_if_closed)
|
677
677
|
{
|
678
|
-
#ifdef HAVE_RB_DATA_TYPE_T_FUNCTION
|
679
678
|
oci8_base_t *hp = Check_TypedStruct(obj, &data_type->rb_data_type);
|
680
|
-
#else
|
681
|
-
oci8_base_t *hp;
|
682
|
-
const char *expected_type_name = data_type->rb_data_type.wrap_struct_name;
|
683
|
-
const rb_data_type_t *rb_data_type;
|
684
|
-
const rb_data_type_t *expected_rb_data_type = &data_type->rb_data_type;
|
685
|
-
|
686
|
-
if (TYPE(obj) != T_DATA || !rb_obj_is_kind_of(obj, oci8_cOCIHandle)) {
|
687
|
-
rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)",
|
688
|
-
rb_obj_classname(obj), expected_type_name);
|
689
|
-
}
|
690
|
-
hp = DATA_PTR(obj);
|
691
|
-
rb_data_type = &hp->data_type->rb_data_type;
|
692
|
-
while (rb_data_type != expected_rb_data_type) {
|
693
|
-
if (rb_data_type == NULL) {
|
694
|
-
rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)",
|
695
|
-
rb_obj_classname(obj), expected_type_name);
|
696
|
-
}
|
697
|
-
rb_data_type = rb_data_type->parent;
|
698
|
-
}
|
699
|
-
#endif
|
700
679
|
if (error_if_closed && hp->closed) {
|
701
680
|
rb_raise(eOCIException, "%s was already closed.",
|
702
681
|
rb_obj_classname(obj));
|
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/ext/oci8/oraconf.rb
CHANGED
@@ -130,6 +130,8 @@ class MiniSOReader
|
|
130
130
|
@cpu = :ia64
|
131
131
|
when 62
|
132
132
|
@cpu = :x86_64
|
133
|
+
when 183
|
134
|
+
@cpu = :aarch64
|
133
135
|
else
|
134
136
|
raise "Invalid ELF archtype: #{archtype}"
|
135
137
|
end
|
@@ -379,6 +381,8 @@ EOS
|
|
379
381
|
@@ld_envs = %w[PATH]
|
380
382
|
so_ext = 'dll'
|
381
383
|
check_proc = make_proc_to_check_cpu(is_32bit ? :i386 : :x86_64)
|
384
|
+
when /aarch64-linux/
|
385
|
+
check_proc = make_proc_to_check_cpu(:aarch64)
|
382
386
|
when /i.86-linux/
|
383
387
|
check_proc = make_proc_to_check_cpu(:i386)
|
384
388
|
when /ia64-linux/
|
data/ext/oci8/oradate.c
CHANGED
@@ -61,18 +61,7 @@ typedef struct ora_date ora_date_t;
|
|
61
61
|
if (sec < 0 || 59 < sec) \
|
62
62
|
rb_raise(rb_eRangeError, "Out of range for second %d (expect 0 .. 59)", sec)
|
63
63
|
|
64
|
-
#ifdef HAVE_RB_DATA_TYPE_T_FUNCTION
|
65
64
|
#define check_oradate(obj) ((ora_date_t*)Check_TypedStruct((obj), &odate_data_type))
|
66
|
-
#else
|
67
|
-
static ora_date_t *check_oradate(VALUE obj)
|
68
|
-
{
|
69
|
-
if (!rb_obj_is_kind_of(obj, cOraDate)) {
|
70
|
-
rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)",
|
71
|
-
rb_obj_classname(obj), rb_class2name(cOraDate));
|
72
|
-
}
|
73
|
-
return DATA_PTR(obj);
|
74
|
-
}
|
75
|
-
#endif
|
76
65
|
|
77
66
|
static size_t odate_memsize(const void *ptr)
|
78
67
|
{
|