ruby-oci8 2.1.8 → 2.2.0.1

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.
@@ -250,9 +250,7 @@ static VALUE oci8_svcctx_alloc(VALUE klass)
250
250
 
251
251
  svcctx->pid = getpid();
252
252
  svcctx->is_autocommit = 0;
253
- #ifdef NATIVE_THREAD_WITH_GVL
254
253
  svcctx->non_blocking = 1;
255
- #endif
256
254
  svcctx->long_read_len = INT2FIX(65535);
257
255
  return self;
258
256
  }
@@ -267,10 +265,10 @@ static VALUE oracle_client_vernum; /* Oracle client version number */
267
265
  * It is devided into 5 parts: 8, 4, 8, 4 and 8 bits.
268
266
  *
269
267
  * @example
270
- * # Oracle 9.2.0.4
271
- * oracle_client_vernum # => 0x09200400
272
- * # => 0x09 2 00 4 00
273
- * # => 9.2.0.4.0
268
+ * # Oracle 10.2.0.4
269
+ * oracle_client_vernum # => 0x0a200400
270
+ * # => 0x0a 2 00 4 00
271
+ * # => 10.2.0.4.0
274
272
  *
275
273
  * # Oracle 11.1.0.7.0
276
274
  * oracle_client_vernum # => 0x0b100700
@@ -761,14 +759,7 @@ static VALUE oci8_rollback(VALUE self)
761
759
  static VALUE oci8_non_blocking_p(VALUE self)
762
760
  {
763
761
  oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
764
- #ifdef NATIVE_THREAD_WITH_GVL
765
762
  return svcctx->non_blocking ? Qtrue : Qfalse;
766
- #else
767
- sb1 non_blocking;
768
-
769
- chker2(OCIAttrGet(svcctx->srvhp, OCI_HTYPE_SERVER, &non_blocking, 0, OCI_ATTR_NONBLOCKING_MODE, oci8_errhp), &svcctx->base);
770
- return non_blocking ? Qtrue : Qfalse;
771
- #endif
772
763
  }
773
764
 
774
765
  /*
@@ -791,20 +782,7 @@ static VALUE oci8_non_blocking_p(VALUE self)
791
782
  static VALUE oci8_set_non_blocking(VALUE self, VALUE val)
792
783
  {
793
784
  oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
794
- #ifdef NATIVE_THREAD_WITH_GVL
795
785
  svcctx->non_blocking = RTEST(val);
796
- #else
797
- sb1 non_blocking;
798
-
799
- if (svcctx->state & OCI8_STATE_CPOOL) {
800
- rb_raise(rb_eRuntimeError, "Could not set non-blocking mode to a connection allocated from OCI8::ConnectionPool.");
801
- }
802
- chker2(OCIAttrGet(svcctx->srvhp, OCI_HTYPE_SERVER, &non_blocking, 0, OCI_ATTR_NONBLOCKING_MODE, oci8_errhp), &svcctx->base);
803
- if ((RTEST(val) && !non_blocking) || (!RTEST(val) && non_blocking)) {
804
- /* toggle blocking / non-blocking. */
805
- chker2(OCIAttrSet(svcctx->srvhp, OCI_HTYPE_SERVER, 0, 0, OCI_ATTR_NONBLOCKING_MODE, oci8_errhp), &svcctx->base);
806
- }
807
- #endif
808
786
  return val;
809
787
  }
810
788
 
@@ -894,9 +872,6 @@ static VALUE oci8_break(VALUE self)
894
872
  if (NIL_P(svcctx->executing_thread)) {
895
873
  return Qfalse;
896
874
  }
897
- #ifndef NATIVE_THREAD_WITH_GVL
898
- chker2(OCIBreak(svcctx->base.hp.ptr, oci8_errhp), &svcctx->base);
899
- #endif
900
875
  rb_thread_wakeup(svcctx->executing_thread);
901
876
  return Qtrue;
902
877
  }
@@ -960,21 +935,9 @@ static VALUE oci8_ping(VALUE self)
960
935
  *
961
936
  * Sets the specified value to {V$SESSION.CLIENT_IDENTIFIER}[http://docs.oracle.com/database/121/REFRN/refrn30223.htm#r62c1-t21].
962
937
  *
963
- * === Oracle 9i client or upper
964
- *
965
938
  * The specified value is sent to the server by piggybacking on the next network
966
939
  * round trip issued by {OCI8#exec}, {OCI8#ping} and so on.
967
940
  *
968
- * === Oracle 8i client or lower
969
- *
970
- * This executes the following PL/SQL block internally.
971
- *
972
- * BEGIN
973
- * DBMS_SESSION.SET_IDENTIFIER(:client_id);
974
- * END;
975
- *
976
- * See {Oracle Manual: Oracle Database PL/SQL Packages and Types Reference}[http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_sessio.htm#i996935]
977
- *
978
941
  * @param [String] client_identifier
979
942
  * @since 2.0.3
980
943
  */
@@ -993,29 +956,12 @@ static VALUE oci8_set_client_identifier(VALUE self, VALUE val)
993
956
  size = 0;
994
957
  }
995
958
 
996
- if (oracle_client_version >= ORAVERNUM(9, 2, 0, 3, 0) || size > 0) {
997
- if (size > 0 && ptr[0] == ':') {
998
- rb_raise(rb_eArgError, "client identifier should not start with ':'.");
999
- }
1000
- chker2(OCIAttrSet(svcctx->usrhp, OCI_HTYPE_SESSION, (dvoid*)ptr,
1001
- size, OCI_ATTR_CLIENT_IDENTIFIER, oci8_errhp),
1002
- &svcctx->base);
1003
- } else {
1004
- /* Workaround for Bug 2449486 */
1005
- oci8_exec_sql_var_t bind_vars[1];
1006
-
1007
- /* :client_id */
1008
- bind_vars[0].valuep = (dvoid*)ptr;
1009
- bind_vars[0].value_sz = size;
1010
- bind_vars[0].dty = SQLT_CHR;
1011
- bind_vars[0].indp = NULL;
1012
- bind_vars[0].alenp = NULL;
1013
-
1014
- oci8_exec_sql(svcctx,
1015
- "BEGIN\n"
1016
- " DBMS_SESSION.SET_IDENTIFIER(:client_id);\n"
1017
- "END;\n", 0, NULL, 1, bind_vars, 1);
959
+ if (size > 0 && ptr[0] == ':') {
960
+ rb_raise(rb_eArgError, "client identifier should not start with ':'.");
1018
961
  }
962
+ chker2(OCIAttrSet(svcctx->usrhp, OCI_HTYPE_SESSION, (dvoid*)ptr,
963
+ size, OCI_ATTR_CLIENT_IDENTIFIER, oci8_errhp),
964
+ &svcctx->base);
1019
965
  return val;
1020
966
  }
1021
967
 
@@ -1027,26 +973,6 @@ static VALUE oci8_set_client_identifier(VALUE self, VALUE val)
1027
973
  * and {V$SQLAREA.MODULE}[http://docs.oracle.com/database/121/REFRN/refrn30259.htm#r46c1-t94]
1028
974
  * when an SQL statement is first parsed in the Oracle server.
1029
975
  *
1030
- * === Oracle 10g client or upper
1031
- *
1032
- * The specified value is sent to the server by piggybacking on the next network
1033
- * round trip issued by {OCI8#exec}, {OCI8#ping} and so on.
1034
- *
1035
- * === Oracle 9i client or lower
1036
- *
1037
- * This executes the following PL/SQL block internally.
1038
- *
1039
- * DECLARE
1040
- * action VARCHAR2(32);
1041
- * BEGIN
1042
- * -- retrieve action name.
1043
- * SELECT SYS_CONTEXT('USERENV','ACTION') INTO action FROM DUAL;
1044
- * -- change module name without modifying the action name.
1045
- * DBMS_APPLICATION_INFO.SET_MODULE(:module, action);
1046
- * END;
1047
- *
1048
- * See {Oracle Manual: Oracle Database PL/SQL Packages and Types Reference}[http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_appinf.htm#i999254]
1049
- *
1050
976
  * @param [String] module
1051
977
  * @since 2.0.3
1052
978
  */
@@ -1064,30 +990,9 @@ static VALUE oci8_set_module(VALUE self, VALUE val)
1064
990
  ptr = "";
1065
991
  size = 0;
1066
992
  }
1067
- if (oracle_client_version >= ORAVER_10_1) {
1068
- /* Oracle 10g or upper */
1069
- chker2(OCIAttrSet(svcctx->usrhp, OCI_HTYPE_SESSION, (dvoid*)ptr,
1070
- size, OCI_ATTR_MODULE, oci8_errhp),
1071
- &svcctx->base);
1072
- } else {
1073
- /* Oracle 9i or lower */
1074
- oci8_exec_sql_var_t bind_vars[1];
1075
-
1076
- /* :module */
1077
- bind_vars[0].valuep = (dvoid*)ptr;
1078
- bind_vars[0].value_sz = size;
1079
- bind_vars[0].dty = SQLT_CHR;
1080
- bind_vars[0].indp = NULL;
1081
- bind_vars[0].alenp = NULL;
1082
-
1083
- oci8_exec_sql(svcctx,
1084
- "DECLARE\n"
1085
- " action VARCHAR2(32);\n"
1086
- "BEGIN\n"
1087
- " SELECT SYS_CONTEXT('USERENV','ACTION') INTO action FROM DUAL;\n"
1088
- " DBMS_APPLICATION_INFO.SET_MODULE(:module, action);\n"
1089
- "END;\n", 0, NULL, 1, bind_vars, 1);
1090
- }
993
+ chker2(OCIAttrSet(svcctx->usrhp, OCI_HTYPE_SESSION, (dvoid*)ptr,
994
+ size, OCI_ATTR_MODULE, oci8_errhp),
995
+ &svcctx->base);
1091
996
  return self;
1092
997
  }
1093
998
 
@@ -1099,21 +1004,9 @@ static VALUE oci8_set_module(VALUE self, VALUE val)
1099
1004
  * and {V$SQLAREA.ACTION}[http://docs.oracle.com/database/121/REFRN/refrn30259.htm#r48c1-t94]
1100
1005
  * when an SQL statement is first parsed in the Oracle server.
1101
1006
  *
1102
- * === Oracle 10g client or upper
1103
- *
1104
1007
  * The specified value is sent to the server by piggybacking on the next network
1105
1008
  * round trip issued by {OCI8#exec}, {OCI8#ping} and so on.
1106
1009
  *
1107
- * === Oracle 9i client or lower
1108
- *
1109
- * This executes the following PL/SQL block internally.
1110
- *
1111
- * BEGIN
1112
- * DBMS_APPLICATION_INFO.SET_ACTION(:action);
1113
- * END;
1114
- *
1115
- * See {Oracle Manual: Oracle Database PL/SQL Packages and Types Reference}[http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_appinf.htm#i999254]
1116
- *
1117
1010
  * @param [String] action
1118
1011
  * @since 2.0.3
1119
1012
  */
@@ -1131,27 +1024,9 @@ static VALUE oci8_set_action(VALUE self, VALUE val)
1131
1024
  ptr = "";
1132
1025
  size = 0;
1133
1026
  }
1134
- if (oracle_client_version >= ORAVER_10_1) {
1135
- /* Oracle 10g or upper */
1136
- chker2(OCIAttrSet(svcctx->usrhp, OCI_HTYPE_SESSION, (dvoid*)ptr,
1137
- size, OCI_ATTR_ACTION, oci8_errhp),
1138
- &svcctx->base);
1139
- } else {
1140
- /* Oracle 9i or lower */
1141
- oci8_exec_sql_var_t bind_vars[1];
1142
-
1143
- /* :action */
1144
- bind_vars[0].valuep = (dvoid*)ptr;
1145
- bind_vars[0].value_sz = size;
1146
- bind_vars[0].dty = SQLT_CHR;
1147
- bind_vars[0].indp = NULL;
1148
- bind_vars[0].alenp = NULL;
1149
-
1150
- oci8_exec_sql(svcctx,
1151
- "BEGIN\n"
1152
- " DBMS_APPLICATION_INFO.SET_ACTION(:action);\n"
1153
- "END;\n", 0, NULL, 1, bind_vars, 1);
1154
- }
1027
+ chker2(OCIAttrSet(svcctx->usrhp, OCI_HTYPE_SESSION, (dvoid*)ptr,
1028
+ size, OCI_ATTR_ACTION, oci8_errhp),
1029
+ &svcctx->base);
1155
1030
  return val;
1156
1031
  }
1157
1032
 
@@ -1160,21 +1035,9 @@ static VALUE oci8_set_action(VALUE self, VALUE val)
1160
1035
  *
1161
1036
  * Sets the specified value to {V$SESSION.CLIENT_INFO}[http://docs.oracle.com/database/121/REFRN/refrn30223.htm#r44c1-t21].
1162
1037
  *
1163
- * === Oracle 10g client or upper
1164
- *
1165
1038
  * The specified value is sent to the server by piggybacking on the next network
1166
1039
  * round trip issued by {OCI8#exec}, {OCI8#ping} and so on.
1167
1040
  *
1168
- * === Oracle 9i client or lower
1169
- *
1170
- * This executes the following PL/SQL block internally.
1171
- *
1172
- * BEGIN
1173
- * DBMS_APPLICATION_INFO.SET_CLIENT_INFO(:client_info);
1174
- * END;
1175
- *
1176
- * See {Oracle Manual: Oracle Database PL/SQL Packages and Types Reference}[http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_appinf.htm#CHEJCFGG]
1177
- *
1178
1041
  * @param [String] client_info
1179
1042
  * @since 2.0.3
1180
1043
  */
@@ -1192,27 +1055,9 @@ static VALUE oci8_set_client_info(VALUE self, VALUE val)
1192
1055
  ptr = "";
1193
1056
  size = 0;
1194
1057
  }
1195
- if (oracle_client_version >= ORAVER_10_1) {
1196
- /* Oracle 10g or upper */
1197
- chker2(OCIAttrSet(svcctx->usrhp, OCI_HTYPE_SESSION, (dvoid*)ptr,
1198
- size, OCI_ATTR_CLIENT_INFO, oci8_errhp),
1199
- &svcctx->base);
1200
- } else {
1201
- /* Oracle 9i or lower */
1202
- oci8_exec_sql_var_t bind_vars[1];
1203
-
1204
- /* :client_info */
1205
- bind_vars[0].valuep = (dvoid*)ptr;
1206
- bind_vars[0].value_sz = size;
1207
- bind_vars[0].dty = SQLT_CHR;
1208
- bind_vars[0].indp = NULL;
1209
- bind_vars[0].alenp = NULL;
1210
-
1211
- oci8_exec_sql(svcctx,
1212
- "BEGIN\n"
1213
- " DBMS_APPLICATION_INFO.SET_CLIENT_INFO(:client_info);\n"
1214
- "END;\n", 0, NULL, 1, bind_vars, 1);
1215
- }
1058
+ chker2(OCIAttrSet(svcctx->usrhp, OCI_HTYPE_SESSION, (dvoid*)ptr,
1059
+ size, OCI_ATTR_CLIENT_INFO, oci8_errhp),
1060
+ &svcctx->base);
1216
1061
  return val;
1217
1062
  }
1218
1063
 
@@ -1251,7 +1096,7 @@ void Init_oci8(VALUE *out)
1251
1096
  oracle_client_vernum = INT2FIX(ORAVERNUM(major, minor, update, patch, port_update));
1252
1097
  }
1253
1098
 
1254
- rb_define_const(cOCI8, "VERSION", rb_obj_freeze(rb_usascii_str_new_cstr(OCI8LIB_VERSION)));
1099
+ rb_define_const(cOCI8, "LIB_VERSION", rb_obj_freeze(rb_usascii_str_new_cstr(OCI8LIB_VERSION)));
1255
1100
  rb_define_singleton_method_nodoc(cOCI8, "oracle_client_vernum", oci8_s_oracle_client_vernum, 0);
1256
1101
  rb_define_singleton_method_nodoc(cOCI8, "__get_prop", oci8_s_get_prop, 1);
1257
1102
  rb_define_singleton_method_nodoc(cOCI8, "__set_prop", oci8_s_set_prop, 2);
@@ -2,21 +2,12 @@
2
2
  /*
3
3
  * oci8.h - part of ruby-oci8
4
4
  *
5
- * Copyright (C) 2002-2014 Kubo Takehiro <kubo@jiubao.org>
5
+ * Copyright (C) 2002-2015 Kubo Takehiro <kubo@jiubao.org>
6
6
  */
7
7
  #ifndef _RUBY_OCI_H_
8
8
  #define _RUBY_OCI_H_ 1
9
9
 
10
10
  #include "ruby.h"
11
-
12
- #ifndef rb_pid_t
13
- #ifdef WIN32
14
- #define rb_pid_t int
15
- #else
16
- #define rb_pid_t pid_t
17
- #endif
18
- #endif
19
-
20
11
  #include <stdio.h>
21
12
  #include <stdlib.h>
22
13
  #include <assert.h>
@@ -43,9 +34,7 @@ extern "C"
43
34
  #define ORAVER_12_1 ORAVERNUM(12, 1, 0, 0, 0)
44
35
 
45
36
  #include "extconf.h"
46
- #ifdef HAVE_TYPE_RB_ENCODING
47
37
  #include <ruby/encoding.h>
48
- #endif
49
38
 
50
39
  #ifndef OCI_TEMP_CLOB
51
40
  #define OCI_TEMP_CLOB 1
@@ -101,75 +90,7 @@ typedef struct OCIMsg OCIMsg;
101
90
  typedef struct OCICPool OCICPool;
102
91
  #endif
103
92
 
104
- /* new macros in ruby 1.8.6.
105
- * define compatible macros for ruby 1.8.5 or lower.
106
- */
107
- #ifndef RSTRING_PTR
108
- #define RSTRING_PTR(obj) RSTRING(obj)->ptr
109
- #endif
110
- #ifndef RSTRING_LEN
111
- #define RSTRING_LEN(obj) RSTRING(obj)->len
112
- #endif
113
- #ifndef RARRAY_PTR
114
- #define RARRAY_PTR(obj) RARRAY(obj)->ptr
115
- #endif
116
- #ifndef RARRAY_LEN
117
- #define RARRAY_LEN(obj) RARRAY(obj)->len
118
- #endif
119
-
120
- #ifndef HAVE_RB_STR_SET_LEN
121
- #define rb_str_set_len(s, l) do { \
122
- RSTRING(s)->len = (l); \
123
- RSTRING(s)->ptr[l] = '\0'; \
124
- } while (0)
125
- #endif
126
-
127
- /* new macros in ruby 1.9.
128
- * define compatible macros for ruby 1.8 or lower.
129
- */
130
- #ifndef RFLOAT_VALUE
131
- #define RFLOAT_VALUE(obj) RFLOAT(obj)->value
132
- #endif
133
- #ifndef STRINGIZE
134
- #define STRINGIZE(name) #name
135
- #endif
136
- #ifndef RB_GC_GUARD
137
- #ifdef __GNUC__
138
- #define RB_GC_GUARD_PTR(ptr) \
139
- __extension__ ({volatile VALUE *rb_gc_guarded_ptr = (ptr); rb_gc_guarded_ptr;})
140
- #else
141
- #ifdef _MSC_VER
142
- #pragma optimize("", off)
143
- #endif
144
- static inline volatile VALUE *rb_gc_guarded_ptr(volatile VALUE *ptr) {return ptr;}
145
- #ifdef _MSC_VER
146
- #pragma optimize("", on)
147
- #endif
148
- #define RB_GC_GUARD_PTR(ptr) rb_gc_guarded_ptr(ptr)
149
- #endif
150
- #define RB_GC_GUARD(v) (*RB_GC_GUARD_PTR(&(v)))
151
- #endif
152
-
153
- /* new functions in ruby 1.9.
154
- * define compatible macros for ruby 1.8 or lower.
155
- */
156
- #if !defined(HAVE_RB_ERRINFO) && defined(HAVE_RUBY_ERRINFO)
157
- #define rb_errinfo() ruby_errinfo
158
- #endif
159
-
160
- #ifndef HAVE_TYPE_RB_ENCODING
161
- /* ruby 1.8, rubinuis 1.2 */
162
- #define rb_enc_associate(str, enc) do {} while(0)
163
- #define rb_enc_str_new(str, len, enc) rb_str_new((str), (len))
164
- #define rb_enc_str_buf_cat(str, ptr, len, enc) rb_str_buf_cat((str), (ptr), (len))
165
- #define rb_external_str_new_with_enc(ptr, len, enc) rb_tainted_str_new((ptr), (len))
166
- #define rb_locale_str_new_cstr(ptr) rb_str_new2(ptr)
167
- #define rb_str_buf_cat_ascii(str, ptr) rb_str_buf_cat2((str), (ptr))
168
- #define rb_str_conv_enc(str, from, to) (str)
169
- #define rb_str_export_to_enc(str, enc) (str)
170
- #define rb_usascii_str_new(ptr, len) rb_str_new((ptr), (len))
171
- #define rb_usascii_str_new_cstr(ptr) rb_str_new2(ptr)
172
- #elif defined RBX_CAPI_RUBY_H
93
+ #if defined RBX_CAPI_RUBY_H
173
94
  /* rubinius 2.0 */
174
95
  #ifndef HAVE_RB_ENC_STR_BUF_CAT
175
96
  #define rb_enc_str_buf_cat(str, ptr, len, enc) \
@@ -179,6 +100,9 @@ static inline volatile VALUE *rb_gc_guarded_ptr(volatile VALUE *ptr) {return ptr
179
100
  #define rb_str_buf_cat_ascii(str, ptr) \
180
101
  rb_str_concat((str), rb_usascii_str_new_cstr(ptr))
181
102
  #endif
103
+ #ifndef STRINGIZE
104
+ #define STRINGIZE(name) #name
105
+ #endif
182
106
  #endif
183
107
 
184
108
  /*
@@ -247,18 +171,6 @@ struct oci8_data_type_struct {
247
171
  #define RB_OBJ_WRITTEN(a, oldv, b) do {(void)oldv;} while (0)
248
172
  #endif
249
173
 
250
- #if defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL) || defined(HAVE_RB_THREAD_BLOCKING_REGION)
251
- #define NATIVE_THREAD_WITH_GVL 1
252
- #endif
253
-
254
- #if defined(HAVE_NATIVETHREAD) || NATIVE_THREAD_WITH_GVL
255
- /*
256
- * oci8_errhp is a thread local object in ruby 1.9, rubinius
257
- * and ruby 1.8 configured with --enable-pthread.
258
- */
259
- #define USE_THREAD_LOCAL_ERRHP 1
260
- #endif
261
-
262
174
  /* macros depends on the compiler.
263
175
  * LIKELY(x) hint for the compiler that 'x' is 1(TRUE) in many cases.
264
176
  * UNLIKELY(x) hint for the compiler that 'x' is 0(FALSE) in many cases.
@@ -291,8 +203,6 @@ struct oci8_data_type_struct {
291
203
  * set a value to the key.
292
204
  *
293
205
  */
294
- #ifdef USE_THREAD_LOCAL_ERRHP
295
- /* rubies with native-thread support. */
296
206
  #if defined(_WIN32)
297
207
  #include <windows.h>
298
208
  #define oci8_tls_key_t DWORD
@@ -304,7 +214,6 @@ struct oci8_data_type_struct {
304
214
  #define oci8_tls_get(key) pthread_getspecific(key)
305
215
  #define oci8_tls_set(key, val) pthread_setspecific((key), (val))
306
216
  #endif
307
- #endif /* USE_THREAD_LOCAL_ERRHP */
308
217
 
309
218
  /* utility macros
310
219
  */
@@ -439,9 +348,7 @@ typedef struct oci8_svcctx {
439
348
  unsigned char state;
440
349
  char is_autocommit;
441
350
  char suppress_free_temp_lobs;
442
- #ifdef NATIVE_THREAD_WITH_GVL
443
351
  char non_blocking;
444
- #endif
445
352
  VALUE long_read_len;
446
353
  oci8_temp_lob_t *temp_lobs;
447
354
  } oci8_svcctx_t;
@@ -469,12 +376,6 @@ typedef struct {
469
376
  #define chker2(status, base) oci8_check_error_((status), (base), NULL, __FILE__, __LINE__)
470
377
  #define chker3(status, base, stmt) oci8_check_error_((status), (base), (stmt), __FILE__, __LINE__)
471
378
 
472
- #if SIZEOF_LONG > 4
473
- #define UB4_TO_NUM INT2FIX
474
- #else
475
- #define UB4_TO_NUM UINT2NUM
476
- #endif
477
-
478
379
  /* The folloiwng macros oci8_envhp and oci8_errhp are used
479
380
  * as if they are defined as follows:
480
381
  *
@@ -482,17 +383,12 @@ typedef struct {
482
383
  * extern OCIError *oci8_errhp;
483
384
  */
484
385
  #define oci8_envhp (LIKELY(oci8_global_envhp != NULL) ? oci8_global_envhp : oci8_make_envhp())
485
- #ifdef USE_THREAD_LOCAL_ERRHP
486
386
  #define oci8_errhp oci8_get_errhp()
487
- #else
488
- #define oci8_errhp (LIKELY(oci8_global_errhp != NULL) ? oci8_global_errhp : oci8_make_errhp())
489
- #endif
490
387
 
491
388
  /* env.c */
492
389
  extern ub4 oci8_env_mode;
493
390
  extern OCIEnv *oci8_global_envhp;
494
391
  OCIEnv *oci8_make_envhp(void);
495
- #ifdef USE_THREAD_LOCAL_ERRHP
496
392
  extern oci8_tls_key_t oci8_tls_key; /* native thread key */
497
393
  OCIError *oci8_make_errhp(void);
498
394
 
@@ -502,10 +398,6 @@ static inline OCIError *oci8_get_errhp()
502
398
  return LIKELY(errhp != NULL) ? errhp : oci8_make_errhp();
503
399
  }
504
400
 
505
- #else
506
- extern OCIError *oci8_global_errhp;
507
- OCIError *oci8_make_errhp(void);
508
- #endif
509
401
  void Init_oci8_env(void);
510
402
 
511
403
  /* oci8lib.c */
@@ -636,8 +528,12 @@ VALUE oci8_get_rowid_attr(oci8_base_t *base, ub4 attrtype, OCIStmt *stmtp);
636
528
 
637
529
  /* encoding.c */
638
530
  void Init_oci8_encoding(VALUE cOCI8);
639
- VALUE oci8_charset_id2name(VALUE svc, VALUE charset_id);
640
531
  extern int oci8_nls_ratio;
532
+ extern rb_encoding *oci8_encoding;
533
+
534
+ /* util.c */
535
+ void Init_oci8_util(VALUE cOCI8);
536
+ const char *oci8_dll_path(void);
641
537
 
642
538
  /* win32.c */
643
539
  void Init_oci8_win32(VALUE cOCI8);
@@ -646,9 +542,6 @@ void Init_oci8_win32(VALUE cOCI8);
646
542
  void oci8_install_hook_functions(void);
647
543
  void oci8_shutdown_sockets(void);
648
544
 
649
- #ifdef HAVE_TYPE_RB_ENCODING
650
- extern rb_encoding *oci8_encoding;
651
-
652
545
  #define OCI8StringValue(v) do { \
653
546
  StringValue(v); \
654
547
  (v) = rb_str_export_to_enc(v, oci8_encoding); \
@@ -657,10 +550,6 @@ extern rb_encoding *oci8_encoding;
657
550
  SafeStringValue(v); \
658
551
  (v) = rb_str_export_to_enc(v, oci8_encoding); \
659
552
  } while (0)
660
- #else
661
- #define OCI8StringValue(v) StringValue(v)
662
- #define OCI8SafeStringValue(v) SafeStringValue(v)
663
- #endif
664
553
 
665
554
  #include "thread_util.h"
666
555
  #include "apiwrap.h"