ruby-oci8 2.1.7 → 2.1.8
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.
- data/ChangeLog +136 -0
 - data/NEWS +61 -0
 - data/README.md +2 -2
 - data/VERSION +1 -1
 - data/dist-files +5 -0
 - data/docs/install-instant-client.md +2 -0
 - data/ext/oci8/attr.c +0 -9
 - data/ext/oci8/bind.c +86 -28
 - data/ext/oci8/connection_pool.c +32 -17
 - data/ext/oci8/extconf.rb +21 -0
 - data/ext/oci8/hook_funcs.c +215 -0
 - data/ext/oci8/lob.c +363 -168
 - data/ext/oci8/metadata.c +43 -26
 - data/ext/oci8/object.c +115 -36
 - data/ext/oci8/oci8.c +392 -269
 - data/ext/oci8/oci8.h +88 -33
 - data/ext/oci8/oci8lib.c +59 -28
 - data/ext/oci8/ocidatetime.c +100 -36
 - data/ext/oci8/ocihandle.c +288 -286
 - data/ext/oci8/ocinumber.c +172 -112
 - data/ext/oci8/oradate.c +129 -87
 - data/ext/oci8/plthook.h +56 -0
 - data/ext/oci8/plthook_elf.c +537 -0
 - data/ext/oci8/plthook_osx.c +474 -0
 - data/ext/oci8/plthook_win32.c +376 -0
 - data/ext/oci8/stmt.c +112 -75
 - data/lib/oci8/cursor.rb +1 -1
 - data/lib/oci8/oci8.rb +71 -0
 - data/lib/oci8/properties.rb +18 -3
 - metadata +10 -16
 
    
        data/ext/oci8/oci8.c
    CHANGED
    
    | 
         @@ -2,7 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            /*
         
     | 
| 
       3 
3 
     | 
    
         
             
             * oci8.c - part of ruby-oci8
         
     | 
| 
       4 
4 
     | 
    
         
             
             *
         
     | 
| 
       5 
     | 
    
         
            -
             * Copyright (C) 2002- 
     | 
| 
      
 5 
     | 
    
         
            +
             * Copyright (C) 2002-2015 Kubo Takehiro <kubo@jiubao.org>
         
     | 
| 
       6 
6 
     | 
    
         
             
             *
         
     | 
| 
       7 
7 
     | 
    
         
             
             */
         
     | 
| 
       8 
8 
     | 
    
         
             
            #include "oci8.h"
         
     | 
| 
         @@ -30,6 +30,9 @@ extern rb_pid_t rb_w32_getpid(void); 
     | 
|
| 
       30 
30 
     | 
    
         
             
            #ifndef OCI_ATTR_CLIENT_INFO
         
     | 
| 
       31 
31 
     | 
    
         
             
            #define OCI_ATTR_CLIENT_INFO 368
         
     | 
| 
       32 
32 
     | 
    
         
             
            #endif
         
     | 
| 
      
 33 
     | 
    
         
            +
            #ifndef OCI_ATTR_TRANSACTION_IN_PROGRESS
         
     | 
| 
      
 34 
     | 
    
         
            +
            #define OCI_ATTR_TRANSACTION_IN_PROGRESS 484
         
     | 
| 
      
 35 
     | 
    
         
            +
            #endif
         
     | 
| 
       33 
36 
     | 
    
         | 
| 
       34 
37 
     | 
    
         
             
            #define OCI8_STATE_SESSION_BEGIN_WAS_CALLED 0x01
         
     | 
| 
       35 
38 
     | 
    
         
             
            #define OCI8_STATE_SERVER_ATTACH_WAS_CALLED 0x02
         
     | 
| 
         @@ -63,24 +66,106 @@ static VALUE dummy_env_method_missing(int argc, VALUE *argv, VALUE self) 
     | 
|
| 
       63 
66 
     | 
    
         
             
                return rb_apply(obj, SYM2ID(method_id), args);
         
     | 
| 
       64 
67 
     | 
    
         
             
            }
         
     | 
| 
       65 
68 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
            static void  
     | 
| 
      
 69 
     | 
    
         
            +
            static void oci8_handle_dont_free(oci8_base_t *base)
         
     | 
| 
       67 
70 
     | 
    
         
             
            {
         
     | 
| 
       68 
71 
     | 
    
         
             
                base->type = 0;
         
     | 
| 
      
 72 
     | 
    
         
            +
                base->closed = 1;
         
     | 
| 
       69 
73 
     | 
    
         
             
                base->hp.ptr = NULL;
         
     | 
| 
       70 
74 
     | 
    
         
             
            }
         
     | 
| 
       71 
75 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
            static  
     | 
| 
       73 
     | 
    
         
            -
                 
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
      
 76 
     | 
    
         
            +
            static const oci8_handle_data_type_t oci8_session_data_type = {
         
     | 
| 
      
 77 
     | 
    
         
            +
                {
         
     | 
| 
      
 78 
     | 
    
         
            +
                    "OCI8::Session",
         
     | 
| 
      
 79 
     | 
    
         
            +
                    {
         
     | 
| 
      
 80 
     | 
    
         
            +
                        NULL,
         
     | 
| 
      
 81 
     | 
    
         
            +
                        oci8_handle_cleanup,
         
     | 
| 
      
 82 
     | 
    
         
            +
                        oci8_handle_size,
         
     | 
| 
      
 83 
     | 
    
         
            +
                    },
         
     | 
| 
      
 84 
     | 
    
         
            +
                    &oci8_handle_data_type.rb_data_type, NULL,
         
     | 
| 
      
 85 
     | 
    
         
            +
            #ifdef RUBY_TYPED_WB_PROTECTED
         
     | 
| 
      
 86 
     | 
    
         
            +
                    RUBY_TYPED_WB_PROTECTED,
         
     | 
| 
      
 87 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 88 
     | 
    
         
            +
                },
         
     | 
| 
      
 89 
     | 
    
         
            +
                oci8_handle_dont_free,
         
     | 
| 
      
 90 
     | 
    
         
            +
                sizeof(oci8_base_t),
         
     | 
| 
      
 91 
     | 
    
         
            +
            };
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
            static VALUE oci8_session_alloc(VALUE klass)
         
     | 
| 
      
 94 
     | 
    
         
            +
            {
         
     | 
| 
      
 95 
     | 
    
         
            +
                return oci8_allocate_typeddata(klass, &oci8_session_data_type);
         
     | 
| 
      
 96 
     | 
    
         
            +
            }
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
            static const oci8_handle_data_type_t oci8_server_data_type = {
         
     | 
| 
      
 99 
     | 
    
         
            +
                {
         
     | 
| 
      
 100 
     | 
    
         
            +
                    "OCI8::Server",
         
     | 
| 
      
 101 
     | 
    
         
            +
                    {
         
     | 
| 
      
 102 
     | 
    
         
            +
                        NULL,
         
     | 
| 
      
 103 
     | 
    
         
            +
                        oci8_handle_cleanup,
         
     | 
| 
      
 104 
     | 
    
         
            +
                        oci8_handle_size,
         
     | 
| 
      
 105 
     | 
    
         
            +
                    },
         
     | 
| 
      
 106 
     | 
    
         
            +
                    &oci8_handle_data_type.rb_data_type, NULL,
         
     | 
| 
      
 107 
     | 
    
         
            +
            #ifdef RUBY_TYPED_WB_PROTECTED
         
     | 
| 
      
 108 
     | 
    
         
            +
                    RUBY_TYPED_WB_PROTECTED,
         
     | 
| 
      
 109 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 110 
     | 
    
         
            +
                },
         
     | 
| 
      
 111 
     | 
    
         
            +
                oci8_handle_dont_free,
         
     | 
| 
      
 112 
     | 
    
         
            +
                sizeof(oci8_base_t),
         
     | 
| 
      
 113 
     | 
    
         
            +
            };
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
            static VALUE oci8_server_alloc(VALUE klass)
         
     | 
| 
      
 116 
     | 
    
         
            +
            {
         
     | 
| 
      
 117 
     | 
    
         
            +
                return oci8_allocate_typeddata(klass, &oci8_server_data_type);
         
     | 
| 
      
 118 
     | 
    
         
            +
            }
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
            static const oci8_handle_data_type_t oci8_environment_data_type = {
         
     | 
| 
      
 121 
     | 
    
         
            +
                {
         
     | 
| 
      
 122 
     | 
    
         
            +
                    "OCI8::Environment",
         
     | 
| 
      
 123 
     | 
    
         
            +
                    {
         
     | 
| 
      
 124 
     | 
    
         
            +
                        NULL,
         
     | 
| 
      
 125 
     | 
    
         
            +
                        oci8_handle_cleanup,
         
     | 
| 
      
 126 
     | 
    
         
            +
                        oci8_handle_size,
         
     | 
| 
      
 127 
     | 
    
         
            +
                    },
         
     | 
| 
      
 128 
     | 
    
         
            +
                    &oci8_handle_data_type.rb_data_type, NULL,
         
     | 
| 
      
 129 
     | 
    
         
            +
            #ifdef RUBY_TYPED_WB_PROTECTED
         
     | 
| 
      
 130 
     | 
    
         
            +
                    RUBY_TYPED_WB_PROTECTED,
         
     | 
| 
      
 131 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 132 
     | 
    
         
            +
                },
         
     | 
| 
      
 133 
     | 
    
         
            +
                oci8_handle_dont_free,
         
     | 
| 
      
 134 
     | 
    
         
            +
                sizeof(oci8_base_t),
         
     | 
| 
      
 135 
     | 
    
         
            +
            };
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
            static VALUE oci8_environment_alloc(VALUE klass)
         
     | 
| 
      
 138 
     | 
    
         
            +
            {
         
     | 
| 
      
 139 
     | 
    
         
            +
                return oci8_allocate_typeddata(klass, &oci8_environment_data_type);
         
     | 
| 
      
 140 
     | 
    
         
            +
            }
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
            static const oci8_handle_data_type_t oci8_process_data_type = {
         
     | 
| 
      
 143 
     | 
    
         
            +
                {
         
     | 
| 
      
 144 
     | 
    
         
            +
                    "OCI8::Process",
         
     | 
| 
      
 145 
     | 
    
         
            +
                    {
         
     | 
| 
      
 146 
     | 
    
         
            +
                        NULL,
         
     | 
| 
      
 147 
     | 
    
         
            +
                        oci8_handle_cleanup,
         
     | 
| 
      
 148 
     | 
    
         
            +
                        oci8_handle_size,
         
     | 
| 
      
 149 
     | 
    
         
            +
                    },
         
     | 
| 
      
 150 
     | 
    
         
            +
                    &oci8_handle_data_type.rb_data_type, NULL,
         
     | 
| 
      
 151 
     | 
    
         
            +
            #ifdef RUBY_TYPED_WB_PROTECTED
         
     | 
| 
      
 152 
     | 
    
         
            +
                    RUBY_TYPED_WB_PROTECTED,
         
     | 
| 
      
 153 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 154 
     | 
    
         
            +
                },
         
     | 
| 
      
 155 
     | 
    
         
            +
                oci8_handle_dont_free,
         
     | 
| 
       75 
156 
     | 
    
         
             
                sizeof(oci8_base_t),
         
     | 
| 
       76 
157 
     | 
    
         
             
            };
         
     | 
| 
       77 
158 
     | 
    
         | 
| 
      
 159 
     | 
    
         
            +
            static VALUE oci8_process_alloc(VALUE klass)
         
     | 
| 
      
 160 
     | 
    
         
            +
            {
         
     | 
| 
      
 161 
     | 
    
         
            +
                return oci8_allocate_typeddata(klass, &oci8_process_data_type);
         
     | 
| 
      
 162 
     | 
    
         
            +
            }
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
       78 
164 
     | 
    
         
             
            static void copy_session_handle(oci8_svcctx_t *svcctx)
         
     | 
| 
       79 
165 
     | 
    
         
             
            {
         
     | 
| 
       80 
166 
     | 
    
         
             
                VALUE obj = rb_ivar_get(svcctx->base.self, id_at_session_handle);
         
     | 
| 
       81 
     | 
    
         
            -
                oci8_base_t *base;
         
     | 
| 
      
 167 
     | 
    
         
            +
                oci8_base_t *base = oci8_check_typeddata(obj, &oci8_session_data_type, 1);
         
     | 
| 
       82 
168 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
                Check_Handle(obj, cSession, base);
         
     | 
| 
       84 
169 
     | 
    
         
             
                base->type = OCI_HTYPE_SESSION;
         
     | 
| 
       85 
170 
     | 
    
         
             
                base->hp.usrhp = svcctx->usrhp;
         
     | 
| 
       86 
171 
     | 
    
         
             
            }
         
     | 
| 
         @@ -88,9 +173,8 @@ static void copy_session_handle(oci8_svcctx_t *svcctx) 
     | 
|
| 
       88 
173 
     | 
    
         
             
            static void copy_server_handle(oci8_svcctx_t *svcctx)
         
     | 
| 
       89 
174 
     | 
    
         
             
            {
         
     | 
| 
       90 
175 
     | 
    
         
             
                VALUE obj = rb_ivar_get(svcctx->base.self, id_at_server_handle);
         
     | 
| 
       91 
     | 
    
         
            -
                oci8_base_t *base;
         
     | 
| 
      
 176 
     | 
    
         
            +
                oci8_base_t *base = oci8_check_typeddata(obj, &oci8_server_data_type, 1);
         
     | 
| 
       92 
177 
     | 
    
         | 
| 
       93 
     | 
    
         
            -
                Check_Handle(obj, cServer, base);
         
     | 
| 
       94 
178 
     | 
    
         
             
                base->type = OCI_HTYPE_SERVER;
         
     | 
| 
       95 
179 
     | 
    
         
             
                base->hp.srvhp = svcctx->srvhp;
         
     | 
| 
       96 
180 
     | 
    
         
             
            }
         
     | 
| 
         @@ -115,6 +199,7 @@ static void oci8_svcctx_free(oci8_base_t *base) 
     | 
|
| 
       115 
199 
     | 
    
         
             
                    void *data = strategy->prepare(svcctx);
         
     | 
| 
       116 
200 
     | 
    
         
             
                    int rv;
         
     | 
| 
       117 
201 
     | 
    
         
             
                    svcctx->base.type = 0;
         
     | 
| 
      
 202 
     | 
    
         
            +
                    svcctx->base.closed = 1;
         
     | 
| 
       118 
203 
     | 
    
         
             
                    svcctx->logoff_strategy = NULL;
         
     | 
| 
       119 
204 
     | 
    
         
             
                    rv = oci8_run_native_thread(strategy->execute, data);
         
     | 
| 
       120 
205 
     | 
    
         
             
                    if (rv != 0) {
         
     | 
| 
         @@ -127,22 +212,41 @@ static void oci8_svcctx_free(oci8_base_t *base) 
     | 
|
| 
       127 
212 
     | 
    
         
             
                    }
         
     | 
| 
       128 
213 
     | 
    
         
             
                }
         
     | 
| 
       129 
214 
     | 
    
         
             
                svcctx->base.type = 0;
         
     | 
| 
      
 215 
     | 
    
         
            +
                svcctx->base.closed = 1;
         
     | 
| 
       130 
216 
     | 
    
         
             
            }
         
     | 
| 
       131 
217 
     | 
    
         | 
| 
       132 
     | 
    
         
            -
            static  
     | 
| 
      
 218 
     | 
    
         
            +
            static const oci8_handle_data_type_t oci8_svcctx_data_type = {
         
     | 
| 
      
 219 
     | 
    
         
            +
                {
         
     | 
| 
      
 220 
     | 
    
         
            +
                    "OCI8",
         
     | 
| 
      
 221 
     | 
    
         
            +
                    {
         
     | 
| 
      
 222 
     | 
    
         
            +
                        NULL,
         
     | 
| 
      
 223 
     | 
    
         
            +
                        oci8_handle_cleanup,
         
     | 
| 
      
 224 
     | 
    
         
            +
                        oci8_handle_size,
         
     | 
| 
      
 225 
     | 
    
         
            +
                    },
         
     | 
| 
      
 226 
     | 
    
         
            +
                    &oci8_handle_data_type.rb_data_type, NULL,
         
     | 
| 
      
 227 
     | 
    
         
            +
            #ifdef RUBY_TYPED_WB_PROTECTED
         
     | 
| 
      
 228 
     | 
    
         
            +
                    RUBY_TYPED_WB_PROTECTED,
         
     | 
| 
      
 229 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 230 
     | 
    
         
            +
                },
         
     | 
| 
      
 231 
     | 
    
         
            +
                oci8_svcctx_free,
         
     | 
| 
      
 232 
     | 
    
         
            +
                sizeof(oci8_svcctx_t),
         
     | 
| 
      
 233 
     | 
    
         
            +
            };
         
     | 
| 
      
 234 
     | 
    
         
            +
             
     | 
| 
      
 235 
     | 
    
         
            +
            static VALUE oci8_svcctx_alloc(VALUE klass)
         
     | 
| 
       133 
236 
     | 
    
         
             
            {
         
     | 
| 
       134 
     | 
    
         
            -
                 
     | 
| 
      
 237 
     | 
    
         
            +
                VALUE self = oci8_allocate_typeddata(klass, &oci8_svcctx_data_type);
         
     | 
| 
      
 238 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = (oci8_svcctx_t *)RTYPEDDATA_DATA(self);
         
     | 
| 
       135 
239 
     | 
    
         
             
                VALUE obj;
         
     | 
| 
       136 
240 
     | 
    
         | 
| 
       137 
241 
     | 
    
         
             
                svcctx->executing_thread = Qnil;
         
     | 
| 
       138 
242 
     | 
    
         
             
                /* set session handle */
         
     | 
| 
       139 
243 
     | 
    
         
             
                obj = rb_obj_alloc(cSession);
         
     | 
| 
       140 
     | 
    
         
            -
                rb_ivar_set( 
     | 
| 
       141 
     | 
    
         
            -
                oci8_link_to_parent(DATA_PTR(obj), base);
         
     | 
| 
      
 244 
     | 
    
         
            +
                rb_ivar_set(self, id_at_session_handle, obj);
         
     | 
| 
      
 245 
     | 
    
         
            +
                oci8_link_to_parent(DATA_PTR(obj), &svcctx->base);
         
     | 
| 
       142 
246 
     | 
    
         
             
                /* set server handle */
         
     | 
| 
       143 
247 
     | 
    
         
             
                obj = rb_obj_alloc(cServer);
         
     | 
| 
       144 
     | 
    
         
            -
                rb_ivar_set( 
     | 
| 
       145 
     | 
    
         
            -
                oci8_link_to_parent(DATA_PTR(obj), base);
         
     | 
| 
      
 248 
     | 
    
         
            +
                rb_ivar_set(self, id_at_server_handle, obj);
         
     | 
| 
      
 249 
     | 
    
         
            +
                oci8_link_to_parent(DATA_PTR(obj), &svcctx->base);
         
     | 
| 
       146 
250 
     | 
    
         | 
| 
       147 
251 
     | 
    
         
             
                svcctx->pid = getpid();
         
     | 
| 
       148 
252 
     | 
    
         
             
                svcctx->is_autocommit = 0;
         
     | 
| 
         @@ -150,29 +254,43 @@ static void oci8_svcctx_init(oci8_base_t *base) 
     | 
|
| 
       150 
254 
     | 
    
         
             
                svcctx->non_blocking = 1;
         
     | 
| 
       151 
255 
     | 
    
         
             
            #endif
         
     | 
| 
       152 
256 
     | 
    
         
             
                svcctx->long_read_len = INT2FIX(65535);
         
     | 
| 
      
 257 
     | 
    
         
            +
                return self;
         
     | 
| 
       153 
258 
     | 
    
         
             
            }
         
     | 
| 
       154 
259 
     | 
    
         | 
| 
       155 
     | 
    
         
            -
            static oci8_base_vtable_t oci8_svcctx_vtable = {
         
     | 
| 
       156 
     | 
    
         
            -
                NULL,
         
     | 
| 
       157 
     | 
    
         
            -
                oci8_svcctx_free,
         
     | 
| 
       158 
     | 
    
         
            -
                sizeof(oci8_svcctx_t),
         
     | 
| 
       159 
     | 
    
         
            -
                oci8_svcctx_init,
         
     | 
| 
       160 
     | 
    
         
            -
            };
         
     | 
| 
       161 
     | 
    
         
            -
             
     | 
| 
       162 
260 
     | 
    
         
             
            static VALUE oracle_client_vernum; /* Oracle client version number */
         
     | 
| 
       163 
261 
     | 
    
         | 
| 
      
 262 
     | 
    
         
            +
            /*
         
     | 
| 
      
 263 
     | 
    
         
            +
             * @overload oracle_client_vernum
         
     | 
| 
      
 264 
     | 
    
         
            +
             *
         
     | 
| 
      
 265 
     | 
    
         
            +
             *  Returns Oracle client version as <i>Integer</i>.
         
     | 
| 
      
 266 
     | 
    
         
            +
             *  The Oracle version is encoded in 32-bit integer.
         
     | 
| 
      
 267 
     | 
    
         
            +
             *  It is devided into 5 parts: 8, 4, 8, 4 and 8 bits.
         
     | 
| 
      
 268 
     | 
    
         
            +
             *
         
     | 
| 
      
 269 
     | 
    
         
            +
             *  @example
         
     | 
| 
      
 270 
     | 
    
         
            +
             *    # Oracle 9.2.0.4
         
     | 
| 
      
 271 
     | 
    
         
            +
             *    oracle_client_vernum # => 0x09200400
         
     | 
| 
      
 272 
     | 
    
         
            +
             *                         # => 0x09 2 00 4 00
         
     | 
| 
      
 273 
     | 
    
         
            +
             *                         # => 9.2.0.4.0
         
     | 
| 
      
 274 
     | 
    
         
            +
             *
         
     | 
| 
      
 275 
     | 
    
         
            +
             *    # Oracle 11.1.0.7.0
         
     | 
| 
      
 276 
     | 
    
         
            +
             *    oracle_client_vernum # => 0x0b100700
         
     | 
| 
      
 277 
     | 
    
         
            +
             *                         # => 0x0b 1 00 7 00
         
     | 
| 
      
 278 
     | 
    
         
            +
             *                         # => 11.1.0.7.0
         
     | 
| 
      
 279 
     | 
    
         
            +
             *
         
     | 
| 
      
 280 
     | 
    
         
            +
             *  @return [Integer]
         
     | 
| 
      
 281 
     | 
    
         
            +
             *  @private
         
     | 
| 
      
 282 
     | 
    
         
            +
             */
         
     | 
| 
       164 
283 
     | 
    
         
             
            static VALUE oci8_s_oracle_client_vernum(VALUE klass)
         
     | 
| 
       165 
284 
     | 
    
         
             
            {
         
     | 
| 
       166 
285 
     | 
    
         
             
                return oracle_client_vernum;
         
     | 
| 
       167 
286 
     | 
    
         
             
            }
         
     | 
| 
       168 
287 
     | 
    
         | 
| 
       169 
288 
     | 
    
         
             
            /*
         
     | 
| 
       170 
     | 
    
         
            -
             *  
     | 
| 
       171 
     | 
    
         
            -
             *   OCI8.__get_prop(key)
         
     | 
| 
      
 289 
     | 
    
         
            +
             * @overload OCI8.__get_prop(key)
         
     | 
| 
       172 
290 
     | 
    
         
             
             *
         
     | 
| 
       173 
     | 
    
         
            -
             * 
     | 
| 
       174 
     | 
    
         
            -
             *
         
     | 
| 
       175 
     | 
    
         
            -
             * 
     | 
| 
      
 291 
     | 
    
         
            +
             *  @param [Fixnum] key    1, 2 or 3
         
     | 
| 
      
 292 
     | 
    
         
            +
             *  @return [Object]       depends on +key+.
         
     | 
| 
      
 293 
     | 
    
         
            +
             *  @private
         
     | 
| 
       176 
294 
     | 
    
         
             
             */
         
     | 
| 
       177 
295 
     | 
    
         
             
            static VALUE oci8_s_get_prop(VALUE klass, VALUE key)
         
     | 
| 
       178 
296 
     | 
    
         
             
            {
         
     | 
| 
         @@ -188,16 +306,18 @@ static VALUE oci8_s_get_prop(VALUE klass, VALUE key) 
     | 
|
| 
       188 
306 
     | 
    
         | 
| 
       189 
307 
     | 
    
         | 
| 
       190 
308 
     | 
    
         
             
            /*
         
     | 
| 
       191 
     | 
    
         
            -
             *  
     | 
| 
       192 
     | 
    
         
            -
             *   OCI8.__set_prop(key, value)
         
     | 
| 
      
 309 
     | 
    
         
            +
             * @overload OCI8.__set_prop(key, value)
         
     | 
| 
       193 
310 
     | 
    
         
             
             *
         
     | 
| 
       194 
     | 
    
         
            -
             * 
     | 
| 
       195 
     | 
    
         
            -
             * 
     | 
| 
      
 311 
     | 
    
         
            +
             *  @param [Fixnum] key    1, 2 or 3
         
     | 
| 
      
 312 
     | 
    
         
            +
             *  @param [Object] value  depends on +key+.
         
     | 
| 
       196 
313 
     | 
    
         
             
             *
         
     | 
| 
       197 
     | 
    
         
            -
             * 
     | 
| 
      
 314 
     | 
    
         
            +
             *  @private
         
     | 
| 
       198 
315 
     | 
    
         
             
             */
         
     | 
| 
       199 
316 
     | 
    
         
             
            static VALUE oci8_s_set_prop(VALUE klass, VALUE key, VALUE val)
         
     | 
| 
       200 
317 
     | 
    
         
             
            {
         
     | 
| 
      
 318 
     | 
    
         
            +
            #ifdef HAVE_PLTHOOK
         
     | 
| 
      
 319 
     | 
    
         
            +
                static int hook_functions_installed = 0;
         
     | 
| 
      
 320 
     | 
    
         
            +
            #endif
         
     | 
| 
       201 
321 
     | 
    
         
             
                switch (NUM2INT(key)) {
         
     | 
| 
       202 
322 
     | 
    
         
             
                case 1:
         
     | 
| 
       203 
323 
     | 
    
         
             
                    oci8_float_conversion_type_is_ruby = RTEST(val) ? 1 : 0;
         
     | 
| 
         @@ -212,6 +332,16 @@ static VALUE oci8_s_set_prop(VALUE klass, VALUE key, VALUE val) 
     | 
|
| 
       212 
332 
     | 
    
         
             
                    }
         
     | 
| 
       213 
333 
     | 
    
         
             
                    oci8_env_mode = NUM2UINT(val);
         
     | 
| 
       214 
334 
     | 
    
         
             
                    break;
         
     | 
| 
      
 335 
     | 
    
         
            +
                case 3:
         
     | 
| 
      
 336 
     | 
    
         
            +
            #ifdef HAVE_PLTHOOK
         
     | 
| 
      
 337 
     | 
    
         
            +
                    if (!hook_functions_installed) {
         
     | 
| 
      
 338 
     | 
    
         
            +
                        oci8_install_hook_functions();
         
     | 
| 
      
 339 
     | 
    
         
            +
                        hook_functions_installed = 1;
         
     | 
| 
      
 340 
     | 
    
         
            +
                    }
         
     | 
| 
      
 341 
     | 
    
         
            +
            #else
         
     | 
| 
      
 342 
     | 
    
         
            +
                    rb_raise(rb_eNotImpError, ":cancel_read_at_exit isn't implemented on this machine.");
         
     | 
| 
      
 343 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 344 
     | 
    
         
            +
                    break;
         
     | 
| 
       215 
345 
     | 
    
         
             
                default:
         
     | 
| 
       216 
346 
     | 
    
         
             
                    rb_raise(rb_eArgError, "Unknown prop %d", NUM2INT(key));
         
     | 
| 
       217 
347 
     | 
    
         
             
                }
         
     | 
| 
         @@ -219,23 +349,20 @@ static VALUE oci8_s_set_prop(VALUE klass, VALUE key, VALUE val) 
     | 
|
| 
       219 
349 
     | 
    
         
             
            }
         
     | 
| 
       220 
350 
     | 
    
         | 
| 
       221 
351 
     | 
    
         
             
            /*
         
     | 
| 
       222 
     | 
    
         
            -
             *  
     | 
| 
       223 
     | 
    
         
            -
             *   OCI8.error_message(message_no) -> string
         
     | 
| 
      
 352 
     | 
    
         
            +
             * @overload error_message(message_no)
         
     | 
| 
       224 
353 
     | 
    
         
             
             *
         
     | 
| 
       225 
     | 
    
         
            -
             * 
     | 
| 
       226 
     | 
    
         
            -
             * 
     | 
| 
      
 354 
     | 
    
         
            +
             *  Get the Oracle error message specified by message_no.
         
     | 
| 
      
 355 
     | 
    
         
            +
             *  Its language depends on NLS_LANGUAGE.
         
     | 
| 
       227 
356 
     | 
    
         
             
             *
         
     | 
| 
       228 
     | 
    
         
            -
             * 
     | 
| 
      
 357 
     | 
    
         
            +
             *  @example
         
     | 
| 
      
 358 
     | 
    
         
            +
             *    # When NLS_LANG is AMERICAN_AMERICA.AL32UTF8
         
     | 
| 
      
 359 
     | 
    
         
            +
             *    OCI8.error_message(1) # => "ORA-00001: unique constraint (%s.%s) violated"
         
     | 
| 
       229 
360 
     | 
    
         
             
             *
         
     | 
| 
       230 
     | 
    
         
            -
             *  
     | 
| 
       231 
     | 
    
         
            -
             * 
     | 
| 
       232 
     | 
    
         
            -
             *   OCI8.error_message(1) # => "ORA-00001: unique constraint (%s.%s) violated"
         
     | 
| 
       233 
     | 
    
         
            -
             *   
         
     | 
| 
       234 
     | 
    
         
            -
             *   # When NLS_LANG is FRENCH_FRANCE.AL32UTF8
         
     | 
| 
       235 
     | 
    
         
            -
             *   OCI8.error_message(1) # => "ORA-00001: violation de contrainte unique (%s.%s)"
         
     | 
| 
      
 361 
     | 
    
         
            +
             *    # When NLS_LANG is FRENCH_FRANCE.AL32UTF8
         
     | 
| 
      
 362 
     | 
    
         
            +
             *    OCI8.error_message(1) # => "ORA-00001: violation de contrainte unique (%s.%s)"
         
     | 
| 
       236 
363 
     | 
    
         
             
             *
         
     | 
| 
       237 
     | 
    
         
            -
             * 
     | 
| 
       238 
     | 
    
         
            -
             * 
     | 
| 
      
 364 
     | 
    
         
            +
             *  @param [Fixnum] message_no   Oracle error message number
         
     | 
| 
      
 365 
     | 
    
         
            +
             *  @return [String]             Oracle error message
         
     | 
| 
       239 
366 
     | 
    
         
             
             */
         
     | 
| 
       240 
367 
     | 
    
         
             
            static VALUE oci8_s_error_message(VALUE klass, VALUE msgid)
         
     | 
| 
       241 
368 
     | 
    
         
             
            {
         
     | 
| 
         @@ -270,17 +397,18 @@ void oci8_do_parse_connect_string(VALUE conn_str, VALUE *user, VALUE *pass, VALU 
     | 
|
| 
       270 
397 
     | 
    
         
             
            }
         
     | 
| 
       271 
398 
     | 
    
         | 
| 
       272 
399 
     | 
    
         
             
            /*
         
     | 
| 
       273 
     | 
    
         
            -
             *  
     | 
| 
       274 
     | 
    
         
            -
             *   parse_connect_string(string) -> [username, password, dbname, privilege]
         
     | 
| 
      
 400 
     | 
    
         
            +
             * @overload parse_connect_string(connect_string)
         
     | 
| 
       275 
401 
     | 
    
         
             
             *
         
     | 
| 
       276 
     | 
    
         
            -
             * 
     | 
| 
      
 402 
     | 
    
         
            +
             *  Extracts +username+, +password+, +dbname+ and +privilege+ from +connect_string+.
         
     | 
| 
       277 
403 
     | 
    
         
             
             *
         
     | 
| 
       278 
     | 
    
         
            -
             * 
     | 
| 
       279 
     | 
    
         
            -
             * 
     | 
| 
       280 
     | 
    
         
            -
             * 
     | 
| 
       281 
     | 
    
         
            -
             * 
     | 
| 
      
 404 
     | 
    
         
            +
             *  @example
         
     | 
| 
      
 405 
     | 
    
         
            +
             *    "scott/tiger" -> ["scott", "tiger", nil, nil],
         
     | 
| 
      
 406 
     | 
    
         
            +
             *    "scott/tiger@oradb.example.com" -> ["scott", "tiger", "oradb.example.com", nil]
         
     | 
| 
      
 407 
     | 
    
         
            +
             *    "sys/change_on_install as sysdba" -> ["sys", "change_on_install", nil, :SYSDBA]
         
     | 
| 
       282 
408 
     | 
    
         
             
             *
         
     | 
| 
       283 
     | 
    
         
            -
             *  
     | 
| 
      
 409 
     | 
    
         
            +
             *  @param [String] connect_string
         
     | 
| 
      
 410 
     | 
    
         
            +
             *  @return [Array] [username, password, dbname]
         
     | 
| 
      
 411 
     | 
    
         
            +
             *  @private
         
     | 
| 
       284 
412 
     | 
    
         
             
             */
         
     | 
| 
       285 
413 
     | 
    
         
             
            static VALUE oci8_parse_connect_string(VALUE self, VALUE conn_str)
         
     | 
| 
       286 
414 
     | 
    
         
             
            {
         
     | 
| 
         @@ -317,9 +445,15 @@ static void *simple_logoff_execute(void *arg) 
     | 
|
| 
       317 
445 
     | 
    
         
             
            {
         
     | 
| 
       318 
446 
     | 
    
         
             
                simple_logoff_arg_t *sla = (simple_logoff_arg_t *)arg;
         
     | 
| 
       319 
447 
     | 
    
         
             
                OCIError *errhp = oci8_errhp;
         
     | 
| 
      
 448 
     | 
    
         
            +
                boolean txn = TRUE;
         
     | 
| 
       320 
449 
     | 
    
         
             
                sword rv;
         
     | 
| 
       321 
450 
     | 
    
         | 
| 
       322 
     | 
    
         
            -
                 
     | 
| 
      
 451 
     | 
    
         
            +
                if (oracle_client_version >= ORAVER_12_1) {
         
     | 
| 
      
 452 
     | 
    
         
            +
                    OCIAttrGet(sla->usrhp, OCI_HTYPE_SESSION, &txn, NULL, OCI_ATTR_TRANSACTION_IN_PROGRESS, errhp);
         
     | 
| 
      
 453 
     | 
    
         
            +
                }
         
     | 
| 
      
 454 
     | 
    
         
            +
                if (txn) {
         
     | 
| 
      
 455 
     | 
    
         
            +
                    OCITransRollback(sla->svchp, errhp, OCI_DEFAULT);
         
     | 
| 
      
 456 
     | 
    
         
            +
                }
         
     | 
| 
       323 
457 
     | 
    
         
             
                rv = OCILogoff(sla->svchp, errhp);
         
     | 
| 
       324 
458 
     | 
    
         
             
                xfree(sla);
         
     | 
| 
       325 
459 
     | 
    
         
             
                return (void*)(VALUE)rv;
         
     | 
| 
         @@ -358,9 +492,15 @@ static void *complex_logoff_execute(void *arg) 
     | 
|
| 
       358 
492 
     | 
    
         
             
            {
         
     | 
| 
       359 
493 
     | 
    
         
             
                complex_logoff_arg_t *cla = (complex_logoff_arg_t *)arg;
         
     | 
| 
       360 
494 
     | 
    
         
             
                OCIError *errhp = oci8_errhp;
         
     | 
| 
      
 495 
     | 
    
         
            +
                boolean txn = TRUE;
         
     | 
| 
       361 
496 
     | 
    
         
             
                sword rv = OCI_SUCCESS;
         
     | 
| 
       362 
497 
     | 
    
         | 
| 
       363 
     | 
    
         
            -
                 
     | 
| 
      
 498 
     | 
    
         
            +
                if (oracle_client_version >= ORAVER_12_1) {
         
     | 
| 
      
 499 
     | 
    
         
            +
                    OCIAttrGet(cla->usrhp, OCI_HTYPE_SESSION, &txn, NULL, OCI_ATTR_TRANSACTION_IN_PROGRESS, errhp);
         
     | 
| 
      
 500 
     | 
    
         
            +
                }
         
     | 
| 
      
 501 
     | 
    
         
            +
                if (txn) {
         
     | 
| 
      
 502 
     | 
    
         
            +
                    OCITransRollback(cla->svchp, errhp, OCI_DEFAULT);
         
     | 
| 
      
 503 
     | 
    
         
            +
                }
         
     | 
| 
       364 
504 
     | 
    
         | 
| 
       365 
505 
     | 
    
         
             
                if (cla->state & OCI8_STATE_SESSION_BEGIN_WAS_CALLED) {
         
     | 
| 
       366 
506 
     | 
    
         
             
                    rv = OCISessionEnd(cla->svchp, oci8_errhp, cla->usrhp, OCI_DEFAULT);
         
     | 
| 
         @@ -389,16 +529,19 @@ static const oci8_logoff_strategy_t complex_logoff = { 
     | 
|
| 
       389 
529 
     | 
    
         
             
            };
         
     | 
| 
       390 
530 
     | 
    
         | 
| 
       391 
531 
     | 
    
         
             
            /*
         
     | 
| 
       392 
     | 
    
         
            -
             *  
     | 
| 
       393 
     | 
    
         
            -
             *   logon2(username, password, dbname, mode) -> connection
         
     | 
| 
      
 532 
     | 
    
         
            +
             * @overload logon2(username, password, dbname, mode)
         
     | 
| 
       394 
533 
     | 
    
         
             
             *
         
     | 
| 
       395 
     | 
    
         
            -
             * 
     | 
| 
      
 534 
     | 
    
         
            +
             *  Creates a simple logon session by the OCI function OCILogon2().
         
     | 
| 
       396 
535 
     | 
    
         
             
             *
         
     | 
| 
       397 
     | 
    
         
            -
             *  
     | 
| 
      
 536 
     | 
    
         
            +
             *  @param [String] username
         
     | 
| 
      
 537 
     | 
    
         
            +
             *  @param [String] password
         
     | 
| 
      
 538 
     | 
    
         
            +
             *  @param [String] dbname
         
     | 
| 
      
 539 
     | 
    
         
            +
             *  @param [Integer] mode
         
     | 
| 
      
 540 
     | 
    
         
            +
             *  @private
         
     | 
| 
       398 
541 
     | 
    
         
             
             */
         
     | 
| 
       399 
542 
     | 
    
         
             
            static VALUE oci8_logon2(VALUE self, VALUE username, VALUE password, VALUE dbname, VALUE mode)
         
     | 
| 
       400 
543 
     | 
    
         
             
            {
         
     | 
| 
       401 
     | 
    
         
            -
                oci8_svcctx_t *svcctx =  
     | 
| 
      
 544 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       402 
545 
     | 
    
         
             
                ub4 logon2_mode;
         
     | 
| 
       403 
546 
     | 
    
         | 
| 
       404 
547 
     | 
    
         
             
                if (svcctx->logoff_strategy != NULL) {
         
     | 
| 
         @@ -441,17 +584,16 @@ static VALUE oci8_logon2(VALUE self, VALUE username, VALUE password, VALUE dbnam 
     | 
|
| 
       441 
584 
     | 
    
         
             
            }
         
     | 
| 
       442 
585 
     | 
    
         | 
| 
       443 
586 
     | 
    
         
             
            /*
         
     | 
| 
       444 
     | 
    
         
            -
             *  
     | 
| 
       445 
     | 
    
         
            -
             *   allocate_handles()
         
     | 
| 
      
 587 
     | 
    
         
            +
             * @overload allocate_handles()
         
     | 
| 
       446 
588 
     | 
    
         
             
             *
         
     | 
| 
       447 
     | 
    
         
            -
             * 
     | 
| 
       448 
     | 
    
         
            -
             * 
     | 
| 
      
 589 
     | 
    
         
            +
             *  Allocates a service context handle, a session handle and a
         
     | 
| 
      
 590 
     | 
    
         
            +
             *  server handle to use explicit attach and begin-session calls.
         
     | 
| 
       449 
591 
     | 
    
         
             
             *
         
     | 
| 
       450 
     | 
    
         
            -
             * 
     | 
| 
      
 592 
     | 
    
         
            +
             *  @private
         
     | 
| 
       451 
593 
     | 
    
         
             
             */
         
     | 
| 
       452 
594 
     | 
    
         
             
            static VALUE oci8_allocate_handles(VALUE self)
         
     | 
| 
       453 
595 
     | 
    
         
             
            {
         
     | 
| 
       454 
     | 
    
         
            -
                oci8_svcctx_t *svcctx =  
     | 
| 
      
 596 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       455 
597 
     | 
    
         
             
                sword rv;
         
     | 
| 
       456 
598 
     | 
    
         | 
| 
       457 
599 
     | 
    
         
             
                if (svcctx->logoff_strategy != NULL) {
         
     | 
| 
         @@ -481,12 +623,13 @@ static VALUE oci8_allocate_handles(VALUE self) 
     | 
|
| 
       481 
623 
     | 
    
         
             
            }
         
     | 
| 
       482 
624 
     | 
    
         | 
| 
       483 
625 
     | 
    
         
             
            /*
         
     | 
| 
       484 
     | 
    
         
            -
             *  
     | 
| 
       485 
     | 
    
         
            -
             *   server_attach(dbname, mode)
         
     | 
| 
      
 626 
     | 
    
         
            +
             * @overload server_attach(dbname, mode)
         
     | 
| 
       486 
627 
     | 
    
         
             
             *
         
     | 
| 
       487 
     | 
    
         
            -
             * 
     | 
| 
      
 628 
     | 
    
         
            +
             *  Attachs to the server by the OCI function OCIServerAttach().
         
     | 
| 
       488 
629 
     | 
    
         
             
             *
         
     | 
| 
       489 
     | 
    
         
            -
             *  
     | 
| 
      
 630 
     | 
    
         
            +
             *  @param [String] dbname
         
     | 
| 
      
 631 
     | 
    
         
            +
             *  @param [Integer] mode
         
     | 
| 
      
 632 
     | 
    
         
            +
             *  @private
         
     | 
| 
       490 
633 
     | 
    
         
             
             */
         
     | 
| 
       491 
634 
     | 
    
         
             
            static VALUE oci8_server_attach(VALUE self, VALUE dbname, VALUE attach_mode)
         
     | 
| 
       492 
635 
     | 
    
         
             
            {
         
     | 
| 
         @@ -523,16 +666,17 @@ static VALUE oci8_server_attach(VALUE self, VALUE dbname, VALUE attach_mode) 
     | 
|
| 
       523 
666 
     | 
    
         
             
            }
         
     | 
| 
       524 
667 
     | 
    
         | 
| 
       525 
668 
     | 
    
         
             
            /*
         
     | 
| 
       526 
     | 
    
         
            -
             *  
     | 
| 
       527 
     | 
    
         
            -
             *   session_begin(cred, mode)
         
     | 
| 
      
 669 
     | 
    
         
            +
             * @overload session_begin(cred, mode)
         
     | 
| 
       528 
670 
     | 
    
         
             
             *
         
     | 
| 
       529 
     | 
    
         
            -
             * 
     | 
| 
      
 671 
     | 
    
         
            +
             *  Begins the session by the OCI function OCISessionBegin().
         
     | 
| 
       530 
672 
     | 
    
         
             
             *
         
     | 
| 
       531 
     | 
    
         
            -
             *  
     | 
| 
      
 673 
     | 
    
         
            +
             *  @param [Fixnum] cred
         
     | 
| 
      
 674 
     | 
    
         
            +
             *  @param [Fixnum] mode
         
     | 
| 
      
 675 
     | 
    
         
            +
             *  @private
         
     | 
| 
       532 
676 
     | 
    
         
             
             */
         
     | 
| 
       533 
677 
     | 
    
         
             
            static VALUE oci8_session_begin(VALUE self, VALUE cred, VALUE mode)
         
     | 
| 
       534 
678 
     | 
    
         
             
            {
         
     | 
| 
       535 
     | 
    
         
            -
                oci8_svcctx_t *svcctx =  
     | 
| 
      
 679 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       536 
680 
     | 
    
         | 
| 
       537 
681 
     | 
    
         
             
                if (svcctx->logoff_strategy != &complex_logoff) {
         
     | 
| 
       538 
682 
     | 
    
         
             
                    rb_raise(rb_eRuntimeError, "Use this method only for the service context handle created by OCI8#server_handle().");
         
     | 
| 
         @@ -559,15 +703,14 @@ static VALUE oci8_session_begin(VALUE self, VALUE cred, VALUE mode) 
     | 
|
| 
       559 
703 
     | 
    
         
             
            }
         
     | 
| 
       560 
704 
     | 
    
         | 
| 
       561 
705 
     | 
    
         
             
            /*
         
     | 
| 
       562 
     | 
    
         
            -
             *  
     | 
| 
       563 
     | 
    
         
            -
             *   logoff
         
     | 
| 
      
 706 
     | 
    
         
            +
             * @overload logoff
         
     | 
| 
       564 
707 
     | 
    
         
             
             *
         
     | 
| 
       565 
     | 
    
         
            -
             * 
     | 
| 
       566 
     | 
    
         
            -
             * 
     | 
| 
      
 708 
     | 
    
         
            +
             *  Disconnects from the Oracle server. The uncommitted transaction is
         
     | 
| 
      
 709 
     | 
    
         
            +
             *  rollbacked.
         
     | 
| 
       567 
710 
     | 
    
         
             
             */
         
     | 
| 
       568 
711 
     | 
    
         
             
            static VALUE oci8_svcctx_logoff(VALUE self)
         
     | 
| 
       569 
712 
     | 
    
         
             
            {
         
     | 
| 
       570 
     | 
    
         
            -
                oci8_svcctx_t *svcctx = ( 
     | 
| 
      
 713 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       571 
714 
     | 
    
         | 
| 
       572 
715 
     | 
    
         
             
                while (svcctx->base.children != NULL) {
         
     | 
| 
       573 
716 
     | 
    
         
             
                    oci8_base_free(svcctx->base.children);
         
     | 
| 
         @@ -576,6 +719,7 @@ static VALUE oci8_svcctx_logoff(VALUE self) 
     | 
|
| 
       576 
719 
     | 
    
         
             
                    const oci8_logoff_strategy_t *strategy = svcctx->logoff_strategy;
         
     | 
| 
       577 
720 
     | 
    
         
             
                    void *data = strategy->prepare(svcctx);
         
     | 
| 
       578 
721 
     | 
    
         
             
                    svcctx->base.type = 0;
         
     | 
| 
      
 722 
     | 
    
         
            +
                    svcctx->base.closed = 1;
         
     | 
| 
       579 
723 
     | 
    
         
             
                    svcctx->logoff_strategy = NULL;
         
     | 
| 
       580 
724 
     | 
    
         
             
                    chker2(oci8_call_without_gvl(svcctx, strategy->execute, data), &svcctx->base);
         
     | 
| 
       581 
725 
     | 
    
         
             
                }
         
     | 
| 
         @@ -583,43 +727,40 @@ static VALUE oci8_svcctx_logoff(VALUE self) 
     | 
|
| 
       583 
727 
     | 
    
         
             
            }
         
     | 
| 
       584 
728 
     | 
    
         | 
| 
       585 
729 
     | 
    
         
             
            /*
         
     | 
| 
       586 
     | 
    
         
            -
             *  
     | 
| 
       587 
     | 
    
         
            -
             *   commit
         
     | 
| 
      
 730 
     | 
    
         
            +
             * @overload commit
         
     | 
| 
       588 
731 
     | 
    
         
             
             *
         
     | 
| 
       589 
     | 
    
         
            -
             * 
     | 
| 
      
 732 
     | 
    
         
            +
             *  Commits the transaction.
         
     | 
| 
       590 
733 
     | 
    
         
             
             */
         
     | 
| 
       591 
734 
     | 
    
         
             
            static VALUE oci8_commit(VALUE self)
         
     | 
| 
       592 
735 
     | 
    
         
             
            {
         
     | 
| 
       593 
     | 
    
         
            -
                oci8_svcctx_t *svcctx =  
     | 
| 
      
 736 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       594 
737 
     | 
    
         
             
                chker2(OCITransCommit_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, OCI_DEFAULT), &svcctx->base);
         
     | 
| 
       595 
738 
     | 
    
         
             
                return self;
         
     | 
| 
       596 
739 
     | 
    
         
             
            }
         
     | 
| 
       597 
740 
     | 
    
         | 
| 
       598 
741 
     | 
    
         
             
            /*
         
     | 
| 
       599 
     | 
    
         
            -
             *  
     | 
| 
       600 
     | 
    
         
            -
             *   rollback
         
     | 
| 
      
 742 
     | 
    
         
            +
             * @overload rollback
         
     | 
| 
       601 
743 
     | 
    
         
             
             *
         
     | 
| 
       602 
     | 
    
         
            -
             * 
     | 
| 
      
 744 
     | 
    
         
            +
             *  Rollbacks the transaction.
         
     | 
| 
       603 
745 
     | 
    
         
             
             */
         
     | 
| 
       604 
746 
     | 
    
         
             
            static VALUE oci8_rollback(VALUE self)
         
     | 
| 
       605 
747 
     | 
    
         
             
            {
         
     | 
| 
       606 
     | 
    
         
            -
                oci8_svcctx_t *svcctx =  
     | 
| 
      
 748 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       607 
749 
     | 
    
         
             
                chker2(OCITransRollback_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, OCI_DEFAULT), &svcctx->base);
         
     | 
| 
       608 
750 
     | 
    
         
             
                return self;
         
     | 
| 
       609 
751 
     | 
    
         
             
            }
         
     | 
| 
       610 
752 
     | 
    
         | 
| 
       611 
753 
     | 
    
         
             
            /*
         
     | 
| 
       612 
     | 
    
         
            -
             *  
     | 
| 
       613 
     | 
    
         
            -
             *   non_blocking? -> true or false
         
     | 
| 
      
 754 
     | 
    
         
            +
             * @overload non_blocking?
         
     | 
| 
       614 
755 
     | 
    
         
             
             *
         
     | 
| 
       615 
     | 
    
         
            -
             * 
     | 
| 
       616 
     | 
    
         
            -
             * 
     | 
| 
      
 756 
     | 
    
         
            +
             *  Returns +true+ if the connection is in non-blocking mode, +false+
         
     | 
| 
      
 757 
     | 
    
         
            +
             *  otherwise.
         
     | 
| 
       617 
758 
     | 
    
         
             
             *
         
     | 
| 
       618 
     | 
    
         
            -
             *  
     | 
| 
      
 759 
     | 
    
         
            +
             *  @see #non_blocking=
         
     | 
| 
       619 
760 
     | 
    
         
             
             */
         
     | 
| 
       620 
761 
     | 
    
         
             
            static VALUE oci8_non_blocking_p(VALUE self)
         
     | 
| 
       621 
762 
     | 
    
         
             
            {
         
     | 
| 
       622 
     | 
    
         
            -
                oci8_svcctx_t *svcctx =  
     | 
| 
      
 763 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       623 
764 
     | 
    
         
             
            #ifdef NATIVE_THREAD_WITH_GVL
         
     | 
| 
       624 
765 
     | 
    
         
             
                return svcctx->non_blocking ? Qtrue : Qfalse;
         
     | 
| 
       625 
766 
     | 
    
         
             
            #else
         
     | 
| 
         @@ -631,45 +772,25 @@ static VALUE oci8_non_blocking_p(VALUE self) 
     | 
|
| 
       631 
772 
     | 
    
         
             
            }
         
     | 
| 
       632 
773 
     | 
    
         | 
| 
       633 
774 
     | 
    
         
             
            /*
         
     | 
| 
       634 
     | 
    
         
            -
             *  
     | 
| 
       635 
     | 
    
         
            -
             *   non_blocking = true or false
         
     | 
| 
       636 
     | 
    
         
            -
             *
         
     | 
| 
       637 
     | 
    
         
            -
             * Sets +true+ to enable non-blocking mode, +false+ otherwise.
         
     | 
| 
       638 
     | 
    
         
            -
             * The default setting depends on the ruby version and ruby-oci8
         
     | 
| 
       639 
     | 
    
         
            -
             * version.
         
     | 
| 
      
 775 
     | 
    
         
            +
             * @overload non_blocking=(non_blocking_mode)
         
     | 
| 
       640 
776 
     | 
    
         
             
             *
         
     | 
| 
       641 
     | 
    
         
            -
             *  
     | 
| 
       642 
     | 
    
         
            -
             *  
     | 
| 
       643 
     | 
    
         
            -
             * process. It makes the whole application stop while a SQL execution
         
     | 
| 
       644 
     | 
    
         
            -
             * needs long time.
         
     | 
| 
      
 777 
     | 
    
         
            +
             *  Sets +true+ to enable non-blocking mode, +false+ otherwise.
         
     | 
| 
      
 778 
     | 
    
         
            +
             *  The default value is +true+ except ruby 1.8.
         
     | 
| 
       645 
779 
     | 
    
         
             
             *
         
     | 
| 
       646 
     | 
    
         
            -
             * 
     | 
| 
       647 
     | 
    
         
            -
             *  
     | 
| 
       648 
     | 
    
         
            -
             *  
     | 
| 
       649 
     | 
    
         
            -
             * OCI8#break.
         
     | 
| 
      
 780 
     | 
    
         
            +
             *  When the connection is in non-blocking mode (non_blocking = true),
         
     | 
| 
      
 781 
     | 
    
         
            +
             *  an SQL execution blocks the thread running the SQL.
         
     | 
| 
      
 782 
     | 
    
         
            +
             *  It does't prevent other threads. The blocking thread can be canceled
         
     | 
| 
      
 783 
     | 
    
         
            +
             *  by {OCI8#break}.
         
     | 
| 
       650 
784 
     | 
    
         
             
             *
         
     | 
| 
       651 
     | 
    
         
            -
             *  
     | 
| 
       652 
     | 
    
         
            -
             *  
     | 
| 
       653 
     | 
    
         
            -
             *  
     | 
| 
       654 
     | 
    
         
            -
             *
         
     | 
| 
       655 
     | 
    
         
            -
             * Ruby-oci8 makes the connection non-blocking by releasing ruby
         
     | 
| 
       656 
     | 
    
         
            -
             * interpreter's GVL (Global VM Lock or Giant VM Lock) while OCI
         
     | 
| 
       657 
     | 
    
         
            -
             * functions which may need more than one network round trips are in
         
     | 
| 
       658 
     | 
    
         
            -
             * execution.
         
     | 
| 
       659 
     | 
    
         
            -
             *
         
     | 
| 
       660 
     | 
    
         
            -
             * === ruby 1.8
         
     | 
| 
       661 
     | 
    
         
            -
             * The default setting is +false+.
         
     | 
| 
       662 
     | 
    
         
            -
             *
         
     | 
| 
       663 
     | 
    
         
            -
             * Ruby-oci8 makes the connection non-blocking by polling the return
         
     | 
| 
       664 
     | 
    
         
            -
             * values of OCI functions. When an OCI function returns
         
     | 
| 
       665 
     | 
    
         
            -
             * OCI_STILL_EXECUTING, the thread sleeps for 10 milli seconds to make
         
     | 
| 
       666 
     | 
    
         
            -
             * a time for other threads to run. The sleep time is doubled up to
         
     | 
| 
       667 
     | 
    
         
            -
             * 640 milli seconds as the function returns the same value.
         
     | 
| 
      
 785 
     | 
    
         
            +
             *  When in blocking mode (non_blocking = false), an SQL execution blocks
         
     | 
| 
      
 786 
     | 
    
         
            +
             *  not only the thread, but also the ruby process itself. It makes the
         
     | 
| 
      
 787 
     | 
    
         
            +
             *  whole application stop until the SQL finishes.
         
     | 
| 
       668 
788 
     | 
    
         
             
             *
         
     | 
| 
      
 789 
     | 
    
         
            +
             *  @param [Boolean] non_blocking_mode
         
     | 
| 
       669 
790 
     | 
    
         
             
             */
         
     | 
| 
       670 
791 
     | 
    
         
             
            static VALUE oci8_set_non_blocking(VALUE self, VALUE val)
         
     | 
| 
       671 
792 
     | 
    
         
             
            {
         
     | 
| 
       672 
     | 
    
         
            -
                oci8_svcctx_t *svcctx =  
     | 
| 
      
 793 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       673 
794 
     | 
    
         
             
            #ifdef NATIVE_THREAD_WITH_GVL
         
     | 
| 
       674 
795 
     | 
    
         
             
                svcctx->non_blocking = RTEST(val);
         
     | 
| 
       675 
796 
     | 
    
         
             
            #else
         
     | 
| 
         @@ -688,78 +809,87 @@ static VALUE oci8_set_non_blocking(VALUE self, VALUE val) 
     | 
|
| 
       688 
809 
     | 
    
         
             
            }
         
     | 
| 
       689 
810 
     | 
    
         | 
| 
       690 
811 
     | 
    
         
             
            /*
         
     | 
| 
       691 
     | 
    
         
            -
             *  
     | 
| 
       692 
     | 
    
         
            -
             *   autocommit? -> true or false
         
     | 
| 
      
 812 
     | 
    
         
            +
             * @overload autocommit?
         
     | 
| 
       693 
813 
     | 
    
         
             
             *
         
     | 
| 
       694 
     | 
    
         
            -
             * 
     | 
| 
       695 
     | 
    
         
            -
             * 
     | 
| 
      
 814 
     | 
    
         
            +
             *  Returns +true+ if the connection is in autocommit mode, +false+
         
     | 
| 
      
 815 
     | 
    
         
            +
             *  otherwise. The default value is +false+.
         
     | 
| 
       696 
816 
     | 
    
         
             
             */
         
     | 
| 
       697 
817 
     | 
    
         
             
            static VALUE oci8_autocommit_p(VALUE self)
         
     | 
| 
       698 
818 
     | 
    
         
             
            {
         
     | 
| 
       699 
     | 
    
         
            -
                oci8_svcctx_t *svcctx =  
     | 
| 
      
 819 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       700 
820 
     | 
    
         
             
                return svcctx->is_autocommit ? Qtrue : Qfalse;
         
     | 
| 
       701 
821 
     | 
    
         
             
            }
         
     | 
| 
       702 
822 
     | 
    
         | 
| 
       703 
823 
     | 
    
         
             
            /*
         
     | 
| 
       704 
     | 
    
         
            -
             *  
     | 
| 
       705 
     | 
    
         
            -
             *   autocommit = true or false
         
     | 
| 
      
 824 
     | 
    
         
            +
             * @overload autocommit=(autocommit_mode)
         
     | 
| 
       706 
825 
     | 
    
         
             
             *
         
     | 
| 
       707 
     | 
    
         
            -
             * 
     | 
| 
      
 826 
     | 
    
         
            +
             *  Sets the autocommit mode. The default value is +false+.
         
     | 
| 
      
 827 
     | 
    
         
            +
             *
         
     | 
| 
      
 828 
     | 
    
         
            +
             *  @param [Boolean] autocommit_mode
         
     | 
| 
       708 
829 
     | 
    
         
             
             */
         
     | 
| 
       709 
830 
     | 
    
         
             
            static VALUE oci8_set_autocommit(VALUE self, VALUE val)
         
     | 
| 
       710 
831 
     | 
    
         
             
            {
         
     | 
| 
       711 
     | 
    
         
            -
                oci8_svcctx_t *svcctx =  
     | 
| 
      
 832 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       712 
833 
     | 
    
         
             
                svcctx->is_autocommit = RTEST(val);
         
     | 
| 
       713 
834 
     | 
    
         
             
                return val;
         
     | 
| 
       714 
835 
     | 
    
         
             
            }
         
     | 
| 
       715 
836 
     | 
    
         | 
| 
       716 
837 
     | 
    
         
             
            /*
         
     | 
| 
       717 
     | 
    
         
            -
             *  
     | 
| 
       718 
     | 
    
         
            -
             * 
     | 
| 
      
 838 
     | 
    
         
            +
             * @overload long_read_len
         
     | 
| 
      
 839 
     | 
    
         
            +
             *
         
     | 
| 
      
 840 
     | 
    
         
            +
             *  Gets the maximum length in bytes to fetch a LONG or LONG RAW
         
     | 
| 
      
 841 
     | 
    
         
            +
             *  column. The default value is 65535.
         
     | 
| 
       719 
842 
     | 
    
         
             
             *
         
     | 
| 
       720 
     | 
    
         
            -
             *  
     | 
| 
       721 
     | 
    
         
            -
             *  
     | 
| 
      
 843 
     | 
    
         
            +
             *  If the actual data length is longer than long_read_len,
         
     | 
| 
      
 844 
     | 
    
         
            +
             *  the fetched valud is truncated and the value of {OCI8#last_error}
         
     | 
| 
      
 845 
     | 
    
         
            +
             *  become {OCISuccessWithInfo} whose message is "ORA-01406: fetched column value was truncated".
         
     | 
| 
       722 
846 
     | 
    
         
             
             *
         
     | 
| 
       723 
     | 
    
         
            -
             *  
     | 
| 
       724 
     | 
    
         
            -
             * "ORA-01406: fetched column value was truncated" is raised.
         
     | 
| 
      
 847 
     | 
    
         
            +
             *  Note: long_read_len is also used for maximum length of XMLTYPE data type.
         
     | 
| 
       725 
848 
     | 
    
         
             
             *
         
     | 
| 
       726 
     | 
    
         
            -
             *  
     | 
| 
      
 849 
     | 
    
         
            +
             *  @return [Integer]
         
     | 
| 
      
 850 
     | 
    
         
            +
             *  @see #long_read_len=
         
     | 
| 
       727 
851 
     | 
    
         
             
             */
         
     | 
| 
       728 
852 
     | 
    
         
             
            static VALUE oci8_long_read_len(VALUE self)
         
     | 
| 
       729 
853 
     | 
    
         
             
            {
         
     | 
| 
       730 
     | 
    
         
            -
                oci8_svcctx_t *svcctx =  
     | 
| 
      
 854 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       731 
855 
     | 
    
         
             
                return svcctx->long_read_len;
         
     | 
| 
       732 
856 
     | 
    
         
             
            }
         
     | 
| 
       733 
857 
     | 
    
         | 
| 
       734 
858 
     | 
    
         
             
            /*
         
     | 
| 
       735 
     | 
    
         
            -
             *  
     | 
| 
       736 
     | 
    
         
            -
             *   long_read_len = fixnum
         
     | 
| 
       737 
     | 
    
         
            -
             *
         
     | 
| 
       738 
     | 
    
         
            -
             * Sets the maximum length in bytes to fetch a LONG or LONG RAW
         
     | 
| 
       739 
     | 
    
         
            -
             * column.
         
     | 
| 
      
 859 
     | 
    
         
            +
             * @overload long_read_len=(length)
         
     | 
| 
       740 
860 
     | 
    
         
             
             *
         
     | 
| 
       741 
     | 
    
         
            -
             *  
     | 
| 
      
 861 
     | 
    
         
            +
             *  Sets the maximum length in bytes to fetch a LONG or LONG RAW
         
     | 
| 
      
 862 
     | 
    
         
            +
             *  column.
         
     | 
| 
       742 
863 
     | 
    
         
             
             *
         
     | 
| 
      
 864 
     | 
    
         
            +
             *  @param [Integer] length
         
     | 
| 
      
 865 
     | 
    
         
            +
             *  @see #long_read_len
         
     | 
| 
       743 
866 
     | 
    
         
             
             */
         
     | 
| 
       744 
867 
     | 
    
         
             
            static VALUE oci8_set_long_read_len(VALUE self, VALUE val)
         
     | 
| 
       745 
868 
     | 
    
         
             
            {
         
     | 
| 
       746 
     | 
    
         
            -
                oci8_svcctx_t *svcctx =  
     | 
| 
      
 869 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       747 
870 
     | 
    
         
             
                Check_Type(val, T_FIXNUM);
         
     | 
| 
       748 
     | 
    
         
            -
                svcctx->long_read_len  
     | 
| 
      
 871 
     | 
    
         
            +
                RB_OBJ_WRITE(self, &svcctx->long_read_len, val);
         
     | 
| 
       749 
872 
     | 
    
         
             
                return val;
         
     | 
| 
       750 
873 
     | 
    
         
             
            }
         
     | 
| 
       751 
874 
     | 
    
         | 
| 
       752 
875 
     | 
    
         
             
            /*
         
     | 
| 
       753 
     | 
    
         
            -
             *  
     | 
| 
       754 
     | 
    
         
            -
             * 
     | 
| 
      
 876 
     | 
    
         
            +
             * @overload break
         
     | 
| 
      
 877 
     | 
    
         
            +
             *
         
     | 
| 
      
 878 
     | 
    
         
            +
             *  Cancels the executing SQL.
         
     | 
| 
      
 879 
     | 
    
         
            +
             *
         
     | 
| 
      
 880 
     | 
    
         
            +
             *  Note that this doesn't work when the following cases.
         
     | 
| 
       755 
881 
     | 
    
         
             
             *
         
     | 
| 
       756 
     | 
    
         
            -
             *  
     | 
| 
      
 882 
     | 
    
         
            +
             *  * The Oracle server runs on Windows.
         
     | 
| 
      
 883 
     | 
    
         
            +
             *  * {Out-of-band data}[http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Out-of-band_data] are blocked by a firewall or by a VPN.
         
     | 
| 
       757 
884 
     | 
    
         
             
             *
         
     | 
| 
       758 
     | 
    
         
            -
             *  
     | 
| 
      
 885 
     | 
    
         
            +
             *  In the latter case, create an sqlnet.ora file in the path specified
         
     | 
| 
      
 886 
     | 
    
         
            +
             *  by the TNS_ADMIN environment variable that sets {DISABLE_OOB=on}[http://www.orafaq.com/wiki/SQL*Net_FAQ#What_are_inband_and_out_of_band_breaks.3F].
         
     | 
| 
      
 887 
     | 
    
         
            +
             *
         
     | 
| 
      
 888 
     | 
    
         
            +
             *  @see OCI8#non_blocking=
         
     | 
| 
       759 
889 
     | 
    
         
             
             */
         
     | 
| 
       760 
890 
     | 
    
         
             
            static VALUE oci8_break(VALUE self)
         
     | 
| 
       761 
891 
     | 
    
         
             
            {
         
     | 
| 
       762 
     | 
    
         
            -
                oci8_svcctx_t *svcctx =  
     | 
| 
      
 892 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       763 
893 
     | 
    
         | 
| 
       764 
894 
     | 
    
         
             
                if (NIL_P(svcctx->executing_thread)) {
         
     | 
| 
       765 
895 
     | 
    
         
             
                    return Qfalse;
         
     | 
| 
         @@ -772,18 +902,18 @@ static VALUE oci8_break(VALUE self) 
     | 
|
| 
       772 
902 
     | 
    
         
             
            }
         
     | 
| 
       773 
903 
     | 
    
         | 
| 
       774 
904 
     | 
    
         
             
            /*
         
     | 
| 
       775 
     | 
    
         
            -
             *  
     | 
| 
       776 
     | 
    
         
            -
             *   oracle_server_vernum -> an integer
         
     | 
| 
      
 905 
     | 
    
         
            +
             * @overload oracle_server_vernum
         
     | 
| 
       777 
906 
     | 
    
         
             
             *
         
     | 
| 
       778 
     | 
    
         
            -
             * 
     | 
| 
      
 907 
     | 
    
         
            +
             *  Returns a numerical format of the Oracle server version.
         
     | 
| 
       779 
908 
     | 
    
         
             
             *
         
     | 
| 
       780 
     | 
    
         
            -
             * 
     | 
| 
       781 
     | 
    
         
            -
             * 
     | 
| 
       782 
     | 
    
         
            -
             *  
     | 
| 
      
 909 
     | 
    
         
            +
             *  @return [Integer]
         
     | 
| 
      
 910 
     | 
    
         
            +
             *  @see OCI8#oracle_server_version
         
     | 
| 
      
 911 
     | 
    
         
            +
             *  @since 2.0.1
         
     | 
| 
      
 912 
     | 
    
         
            +
             *  @private
         
     | 
| 
       783 
913 
     | 
    
         
             
             */
         
     | 
| 
       784 
914 
     | 
    
         
             
            static VALUE oci8_oracle_server_vernum(VALUE self)
         
     | 
| 
       785 
915 
     | 
    
         
             
            {
         
     | 
| 
       786 
     | 
    
         
            -
                oci8_svcctx_t *svcctx =  
     | 
| 
      
 916 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       787 
917 
     | 
    
         
             
                char buf[100];
         
     | 
| 
       788 
918 
     | 
    
         
             
                ub4 version;
         
     | 
| 
       789 
919 
     | 
    
         | 
| 
         @@ -792,23 +922,23 @@ static VALUE oci8_oracle_server_vernum(VALUE self) 
     | 
|
| 
       792 
922 
     | 
    
         
             
            }
         
     | 
| 
       793 
923 
     | 
    
         | 
| 
       794 
924 
     | 
    
         
             
            /*
         
     | 
| 
       795 
     | 
    
         
            -
             *  
     | 
| 
       796 
     | 
    
         
            -
             *   ping -> true or false
         
     | 
| 
      
 925 
     | 
    
         
            +
             * @overload ping
         
     | 
| 
       797 
926 
     | 
    
         
             
             *
         
     | 
| 
       798 
     | 
    
         
            -
             * 
     | 
| 
       799 
     | 
    
         
            -
             * 
     | 
| 
      
 927 
     | 
    
         
            +
             *  Makes a round trip call to the server to confirm that the connection and
         
     | 
| 
      
 928 
     | 
    
         
            +
             *  the server are active.
         
     | 
| 
       800 
929 
     | 
    
         
             
             *
         
     | 
| 
       801 
     | 
    
         
            -
             *  
     | 
| 
       802 
     | 
    
         
            -
             *  
     | 
| 
      
 930 
     | 
    
         
            +
             *  This also flushes all the pending OCI client-side calls such as {OCI8#action=},
         
     | 
| 
      
 931 
     | 
    
         
            +
             *  {OCI8#client_identifier=}, {OCI8#client_info=} and {OCI8#module=}.
         
     | 
| 
       803 
932 
     | 
    
         
             
             *
         
     | 
| 
       804 
     | 
    
         
            -
             * 
     | 
| 
       805 
     | 
    
         
            -
             * 
     | 
| 
       806 
     | 
    
         
            -
             * 
     | 
| 
      
 933 
     | 
    
         
            +
             *  === Oracle 10.2 client or upper
         
     | 
| 
      
 934 
     | 
    
         
            +
             *  A dummy round trip call is made by the OCI function
         
     | 
| 
      
 935 
     | 
    
         
            +
             *  OCIPing[http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14250/oci16msc007.htm#sthref3540] added in Oracle 10.2.
         
     | 
| 
       807 
936 
     | 
    
         
             
             *
         
     | 
| 
       808 
     | 
    
         
            -
             * 
     | 
| 
       809 
     | 
    
         
            -
             * 
     | 
| 
      
 937 
     | 
    
         
            +
             *  === Oracle 10.1 client or lower
         
     | 
| 
      
 938 
     | 
    
         
            +
             *  A simple PL/SQL block "BEGIN NULL; END;" is executed to make a round trip call.
         
     | 
| 
       810 
939 
     | 
    
         
             
             *
         
     | 
| 
       811 
     | 
    
         
            -
             * 
     | 
| 
      
 940 
     | 
    
         
            +
             *  @return [Boolean]
         
     | 
| 
      
 941 
     | 
    
         
            +
             *  @since 2.0.2
         
     | 
| 
       812 
942 
     | 
    
         
             
             */
         
     | 
| 
       813 
943 
     | 
    
         
             
            static VALUE oci8_ping(VALUE self)
         
     | 
| 
       814 
944 
     | 
    
         
             
            {
         
     | 
| 
         @@ -826,33 +956,31 @@ static VALUE oci8_ping(VALUE self) 
     | 
|
| 
       826 
956 
     | 
    
         
             
            }
         
     | 
| 
       827 
957 
     | 
    
         | 
| 
       828 
958 
     | 
    
         
             
            /*
         
     | 
| 
       829 
     | 
    
         
            -
             *  
     | 
| 
       830 
     | 
    
         
            -
             *   client_identifier = string or nil
         
     | 
| 
      
 959 
     | 
    
         
            +
             * @overload client_identifier=(client_identifier)
         
     | 
| 
       831 
960 
     | 
    
         
             
             *
         
     | 
| 
       832 
     | 
    
         
            -
             * 
     | 
| 
       833 
     | 
    
         
            -
             * view.
         
     | 
| 
      
 961 
     | 
    
         
            +
             *  Sets the specified value to {V$SESSION.CLIENT_IDENTIFIER}[http://docs.oracle.com/database/121/REFRN/refrn30223.htm#r62c1-t21].
         
     | 
| 
       834 
962 
     | 
    
         
             
             *
         
     | 
| 
       835 
     | 
    
         
            -
             * 
     | 
| 
      
 963 
     | 
    
         
            +
             *  === Oracle 9i client or upper
         
     | 
| 
       836 
964 
     | 
    
         
             
             *
         
     | 
| 
       837 
     | 
    
         
            -
             *  
     | 
| 
       838 
     | 
    
         
            -
             * 
     | 
| 
       839 
     | 
    
         
            -
             * etc.
         
     | 
| 
      
 965 
     | 
    
         
            +
             *  The specified value is sent to the server by piggybacking on the next network
         
     | 
| 
      
 966 
     | 
    
         
            +
             *  round trip issued by {OCI8#exec}, {OCI8#ping} and so on.
         
     | 
| 
       840 
967 
     | 
    
         
             
             *
         
     | 
| 
       841 
     | 
    
         
            -
             * 
     | 
| 
      
 968 
     | 
    
         
            +
             *  === Oracle 8i client or lower
         
     | 
| 
       842 
969 
     | 
    
         
             
             *
         
     | 
| 
       843 
     | 
    
         
            -
             * 
     | 
| 
       844 
     | 
    
         
            -
             * The change is reflected immediately by a network round trip.
         
     | 
| 
      
 970 
     | 
    
         
            +
             *  This executes the following PL/SQL block internally.
         
     | 
| 
       845 
971 
     | 
    
         
             
             *
         
     | 
| 
       846 
     | 
    
         
            -
             * 
     | 
| 
       847 
     | 
    
         
            -
             * 
     | 
| 
       848 
     | 
    
         
            -
             * 
     | 
| 
      
 972 
     | 
    
         
            +
             *    BEGIN
         
     | 
| 
      
 973 
     | 
    
         
            +
             *      DBMS_SESSION.SET_IDENTIFIER(:client_id);
         
     | 
| 
      
 974 
     | 
    
         
            +
             *    END;
         
     | 
| 
       849 
975 
     | 
    
         
             
             *
         
     | 
| 
       850 
     | 
    
         
            -
             * 
     | 
| 
      
 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]
         
     | 
| 
       851 
977 
     | 
    
         
             
             *
         
     | 
| 
       852 
     | 
    
         
            -
             * 
     | 
| 
      
 978 
     | 
    
         
            +
             *  @param [String] client_identifier
         
     | 
| 
      
 979 
     | 
    
         
            +
             *  @since 2.0.3
         
     | 
| 
       853 
980 
     | 
    
         
             
             */
         
     | 
| 
       854 
981 
     | 
    
         
             
            static VALUE oci8_set_client_identifier(VALUE self, VALUE val)
         
     | 
| 
       855 
982 
     | 
    
         
             
            {
         
     | 
| 
      
 983 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       856 
984 
     | 
    
         
             
                const char *ptr;
         
     | 
| 
       857 
985 
     | 
    
         
             
                ub4 size;
         
     | 
| 
       858 
986 
     | 
    
         | 
| 
         @@ -869,9 +997,9 @@ static VALUE oci8_set_client_identifier(VALUE self, VALUE val) 
     | 
|
| 
       869 
997 
     | 
    
         
             
                    if (size > 0 && ptr[0] == ':') {
         
     | 
| 
       870 
998 
     | 
    
         
             
                        rb_raise(rb_eArgError, "client identifier should not start with ':'.");
         
     | 
| 
       871 
999 
     | 
    
         
             
                    }
         
     | 
| 
       872 
     | 
    
         
            -
                    chker2(OCIAttrSet( 
     | 
| 
      
 1000 
     | 
    
         
            +
                    chker2(OCIAttrSet(svcctx->usrhp, OCI_HTYPE_SESSION, (dvoid*)ptr,
         
     | 
| 
       873 
1001 
     | 
    
         
             
                                      size, OCI_ATTR_CLIENT_IDENTIFIER, oci8_errhp),
         
     | 
| 
       874 
     | 
    
         
            -
                            
     | 
| 
      
 1002 
     | 
    
         
            +
                           &svcctx->base);
         
     | 
| 
       875 
1003 
     | 
    
         
             
                } else {
         
     | 
| 
       876 
1004 
     | 
    
         
             
                    /* Workaround for Bug 2449486 */
         
     | 
| 
       877 
1005 
     | 
    
         
             
                    oci8_exec_sql_var_t bind_vars[1];
         
     | 
| 
         @@ -883,7 +1011,7 @@ static VALUE oci8_set_client_identifier(VALUE self, VALUE val) 
     | 
|
| 
       883 
1011 
     | 
    
         
             
                    bind_vars[0].indp = NULL;
         
     | 
| 
       884 
1012 
     | 
    
         
             
                    bind_vars[0].alenp = NULL;
         
     | 
| 
       885 
1013 
     | 
    
         | 
| 
       886 
     | 
    
         
            -
                    oci8_exec_sql( 
     | 
| 
      
 1014 
     | 
    
         
            +
                    oci8_exec_sql(svcctx,
         
     | 
| 
       887 
1015 
     | 
    
         
             
                                  "BEGIN\n"
         
     | 
| 
       888 
1016 
     | 
    
         
             
                                  "  DBMS_SESSION.SET_IDENTIFIER(:client_id);\n"
         
     | 
| 
       889 
1017 
     | 
    
         
             
                                  "END;\n", 0, NULL, 1, bind_vars, 1);
         
     | 
| 
         @@ -892,40 +1020,39 @@ static VALUE oci8_set_client_identifier(VALUE self, VALUE val) 
     | 
|
| 
       892 
1020 
     | 
    
         
             
            }
         
     | 
| 
       893 
1021 
     | 
    
         | 
| 
       894 
1022 
     | 
    
         
             
            /*
         
     | 
| 
       895 
     | 
    
         
            -
             *  
     | 
| 
       896 
     | 
    
         
            -
             *   module = string or nil
         
     | 
| 
      
 1023 
     | 
    
         
            +
             * @overload module=(module)
         
     | 
| 
       897 
1024 
     | 
    
         
             
             *
         
     | 
| 
       898 
     | 
    
         
            -
             * 
     | 
| 
       899 
     | 
    
         
            -
             *  
     | 
| 
       900 
     | 
    
         
            -
             * 
     | 
| 
       901 
     | 
    
         
            -
             * statement is first parsed in the Oracle server.
         
     | 
| 
      
 1025 
     | 
    
         
            +
             *  Sets the specified value to {V$SESSION.MODULE}[http://docs.oracle.com/database/121/REFRN/refrn30223.htm#r40c1-t21].
         
     | 
| 
      
 1026 
     | 
    
         
            +
             *  This is also stored in {V$SQL.MODULE}[http://docs.oracle.com/database/121/REFRN/refrn30246.htm#r49c1-t58]
         
     | 
| 
      
 1027 
     | 
    
         
            +
             *  and {V$SQLAREA.MODULE}[http://docs.oracle.com/database/121/REFRN/refrn30259.htm#r46c1-t94]
         
     | 
| 
      
 1028 
     | 
    
         
            +
             *  when an SQL statement is first parsed in the Oracle server.
         
     | 
| 
       902 
1029 
     | 
    
         
             
             *
         
     | 
| 
       903 
     | 
    
         
            -
             * 
     | 
| 
      
 1030 
     | 
    
         
            +
             *  === Oracle 10g client or upper
         
     | 
| 
       904 
1031 
     | 
    
         
             
             *
         
     | 
| 
       905 
     | 
    
         
            -
             *  
     | 
| 
       906 
     | 
    
         
            -
             * 
     | 
| 
       907 
     | 
    
         
            -
             * etc.
         
     | 
| 
      
 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.
         
     | 
| 
       908 
1034 
     | 
    
         
             
             *
         
     | 
| 
       909 
     | 
    
         
            -
             * 
     | 
| 
      
 1035 
     | 
    
         
            +
             *  === Oracle 9i client or lower
         
     | 
| 
       910 
1036 
     | 
    
         
             
             *
         
     | 
| 
       911 
     | 
    
         
            -
             * 
     | 
| 
       912 
     | 
    
         
            -
             * The change is reflected immediately by a network round trip.
         
     | 
| 
      
 1037 
     | 
    
         
            +
             *  This executes the following PL/SQL block internally.
         
     | 
| 
       913 
1038 
     | 
    
         
             
             *
         
     | 
| 
       914 
     | 
    
         
            -
             * 
     | 
| 
       915 
     | 
    
         
            -
             * 
     | 
| 
       916 
     | 
    
         
            -
             * 
     | 
| 
       917 
     | 
    
         
            -
             * 
     | 
| 
       918 
     | 
    
         
            -
             * 
     | 
| 
       919 
     | 
    
         
            -
             * 
     | 
| 
       920 
     | 
    
         
            -
             * 
     | 
| 
       921 
     | 
    
         
            -
             * 
     | 
| 
      
 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;
         
     | 
| 
       922 
1047 
     | 
    
         
             
             *
         
     | 
| 
       923 
     | 
    
         
            -
             * 
     | 
| 
      
 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]
         
     | 
| 
       924 
1049 
     | 
    
         
             
             *
         
     | 
| 
       925 
     | 
    
         
            -
             * 
     | 
| 
      
 1050 
     | 
    
         
            +
             *  @param [String] module
         
     | 
| 
      
 1051 
     | 
    
         
            +
             *  @since 2.0.3
         
     | 
| 
       926 
1052 
     | 
    
         
             
             */
         
     | 
| 
       927 
1053 
     | 
    
         
             
            static VALUE oci8_set_module(VALUE self, VALUE val)
         
     | 
| 
       928 
1054 
     | 
    
         
             
            {
         
     | 
| 
      
 1055 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       929 
1056 
     | 
    
         
             
                const char *ptr;
         
     | 
| 
       930 
1057 
     | 
    
         
             
                ub4 size;
         
     | 
| 
       931 
1058 
     | 
    
         | 
| 
         @@ -939,9 +1066,9 @@ static VALUE oci8_set_module(VALUE self, VALUE val) 
     | 
|
| 
       939 
1066 
     | 
    
         
             
                }
         
     | 
| 
       940 
1067 
     | 
    
         
             
                if (oracle_client_version >= ORAVER_10_1) {
         
     | 
| 
       941 
1068 
     | 
    
         
             
                    /* Oracle 10g or upper */
         
     | 
| 
       942 
     | 
    
         
            -
                    chker2(OCIAttrSet( 
     | 
| 
      
 1069 
     | 
    
         
            +
                    chker2(OCIAttrSet(svcctx->usrhp, OCI_HTYPE_SESSION, (dvoid*)ptr,
         
     | 
| 
       943 
1070 
     | 
    
         
             
                                      size, OCI_ATTR_MODULE, oci8_errhp),
         
     | 
| 
       944 
     | 
    
         
            -
                            
     | 
| 
      
 1071 
     | 
    
         
            +
                           &svcctx->base);
         
     | 
| 
       945 
1072 
     | 
    
         
             
                } else {
         
     | 
| 
       946 
1073 
     | 
    
         
             
                    /* Oracle 9i or lower */
         
     | 
| 
       947 
1074 
     | 
    
         
             
                    oci8_exec_sql_var_t bind_vars[1];
         
     | 
| 
         @@ -953,7 +1080,7 @@ static VALUE oci8_set_module(VALUE self, VALUE val) 
     | 
|
| 
       953 
1080 
     | 
    
         
             
                    bind_vars[0].indp = NULL;
         
     | 
| 
       954 
1081 
     | 
    
         
             
                    bind_vars[0].alenp = NULL;
         
     | 
| 
       955 
1082 
     | 
    
         | 
| 
       956 
     | 
    
         
            -
                    oci8_exec_sql( 
     | 
| 
      
 1083 
     | 
    
         
            +
                    oci8_exec_sql(svcctx,
         
     | 
| 
       957 
1084 
     | 
    
         
             
                                  "DECLARE\n"
         
     | 
| 
       958 
1085 
     | 
    
         
             
                                  "  action VARCHAR2(32);\n"
         
     | 
| 
       959 
1086 
     | 
    
         
             
                                  "BEGIN\n"
         
     | 
| 
         @@ -965,36 +1092,34 @@ static VALUE oci8_set_module(VALUE self, VALUE val) 
     | 
|
| 
       965 
1092 
     | 
    
         
             
            }
         
     | 
| 
       966 
1093 
     | 
    
         | 
| 
       967 
1094 
     | 
    
         
             
            /*
         
     | 
| 
       968 
     | 
    
         
            -
             *  
     | 
| 
       969 
     | 
    
         
            -
             *   action = string or nil
         
     | 
| 
      
 1095 
     | 
    
         
            +
             * @overload action=(action)
         
     | 
| 
       970 
1096 
     | 
    
         
             
             *
         
     | 
| 
       971 
     | 
    
         
            -
             * 
     | 
| 
       972 
     | 
    
         
            -
             * 
     | 
| 
       973 
     | 
    
         
            -
             * 
     | 
| 
       974 
     | 
    
         
            -
             *  
     | 
| 
       975 
     | 
    
         
            -
             * in the Oracle server.
         
     | 
| 
      
 1097 
     | 
    
         
            +
             *  Sets the specified value to {V$SESSION.ACTION}[http://docs.oracle.com/database/121/REFRN/refrn30223.htm#r42c1-t21].
         
     | 
| 
      
 1098 
     | 
    
         
            +
             *  This is also stored in {V$SQL.ACTION}[http://docs.oracle.com/database/121/REFRN/refrn30246.htm#r51c1-t58]
         
     | 
| 
      
 1099 
     | 
    
         
            +
             *  and {V$SQLAREA.ACTION}[http://docs.oracle.com/database/121/REFRN/refrn30259.htm#r48c1-t94]
         
     | 
| 
      
 1100 
     | 
    
         
            +
             *  when an SQL statement is first parsed in the Oracle server.
         
     | 
| 
       976 
1101 
     | 
    
         
             
             *
         
     | 
| 
       977 
     | 
    
         
            -
             * 
     | 
| 
      
 1102 
     | 
    
         
            +
             *  === Oracle 10g client or upper
         
     | 
| 
       978 
1103 
     | 
    
         
             
             *
         
     | 
| 
       979 
     | 
    
         
            -
             *  
     | 
| 
       980 
     | 
    
         
            -
             * 
     | 
| 
       981 
     | 
    
         
            -
             * etc.
         
     | 
| 
      
 1104 
     | 
    
         
            +
             *  The specified value is sent to the server by piggybacking on the next network
         
     | 
| 
      
 1105 
     | 
    
         
            +
             *  round trip issued by {OCI8#exec}, {OCI8#ping} and so on.
         
     | 
| 
       982 
1106 
     | 
    
         
             
             *
         
     | 
| 
       983 
     | 
    
         
            -
             * 
     | 
| 
      
 1107 
     | 
    
         
            +
             *  === Oracle 9i client or lower
         
     | 
| 
       984 
1108 
     | 
    
         
             
             *
         
     | 
| 
       985 
     | 
    
         
            -
             * 
     | 
| 
       986 
     | 
    
         
            -
             * The change is reflected immediately by a network round trip.
         
     | 
| 
      
 1109 
     | 
    
         
            +
             *  This executes the following PL/SQL block internally.
         
     | 
| 
       987 
1110 
     | 
    
         
             
             *
         
     | 
| 
       988 
     | 
    
         
            -
             * 
     | 
| 
       989 
     | 
    
         
            -
             * 
     | 
| 
       990 
     | 
    
         
            -
             * 
     | 
| 
      
 1111 
     | 
    
         
            +
             *    BEGIN
         
     | 
| 
      
 1112 
     | 
    
         
            +
             *      DBMS_APPLICATION_INFO.SET_ACTION(:action);
         
     | 
| 
      
 1113 
     | 
    
         
            +
             *    END;
         
     | 
| 
       991 
1114 
     | 
    
         
             
             *
         
     | 
| 
       992 
     | 
    
         
            -
             * 
     | 
| 
      
 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]
         
     | 
| 
       993 
1116 
     | 
    
         
             
             *
         
     | 
| 
       994 
     | 
    
         
            -
             * 
     | 
| 
      
 1117 
     | 
    
         
            +
             *  @param [String] action
         
     | 
| 
      
 1118 
     | 
    
         
            +
             *  @since 2.0.3
         
     | 
| 
       995 
1119 
     | 
    
         
             
             */
         
     | 
| 
       996 
1120 
     | 
    
         
             
            static VALUE oci8_set_action(VALUE self, VALUE val)
         
     | 
| 
       997 
1121 
     | 
    
         
             
            {
         
     | 
| 
      
 1122 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       998 
1123 
     | 
    
         
             
                const char *ptr;
         
     | 
| 
       999 
1124 
     | 
    
         
             
                ub4 size;
         
     | 
| 
       1000 
1125 
     | 
    
         | 
| 
         @@ -1008,9 +1133,9 @@ static VALUE oci8_set_action(VALUE self, VALUE val) 
     | 
|
| 
       1008 
1133 
     | 
    
         
             
                }
         
     | 
| 
       1009 
1134 
     | 
    
         
             
                if (oracle_client_version >= ORAVER_10_1) {
         
     | 
| 
       1010 
1135 
     | 
    
         
             
                    /* Oracle 10g or upper */
         
     | 
| 
       1011 
     | 
    
         
            -
                    chker2(OCIAttrSet( 
     | 
| 
      
 1136 
     | 
    
         
            +
                    chker2(OCIAttrSet(svcctx->usrhp, OCI_HTYPE_SESSION, (dvoid*)ptr,
         
     | 
| 
       1012 
1137 
     | 
    
         
             
                                      size, OCI_ATTR_ACTION, oci8_errhp),
         
     | 
| 
       1013 
     | 
    
         
            -
                            
     | 
| 
      
 1138 
     | 
    
         
            +
                           &svcctx->base);
         
     | 
| 
       1014 
1139 
     | 
    
         
             
                } else {
         
     | 
| 
       1015 
1140 
     | 
    
         
             
                    /* Oracle 9i or lower */
         
     | 
| 
       1016 
1141 
     | 
    
         
             
                    oci8_exec_sql_var_t bind_vars[1];
         
     | 
| 
         @@ -1022,7 +1147,7 @@ static VALUE oci8_set_action(VALUE self, VALUE val) 
     | 
|
| 
       1022 
1147 
     | 
    
         
             
                    bind_vars[0].indp = NULL;
         
     | 
| 
       1023 
1148 
     | 
    
         
             
                    bind_vars[0].alenp = NULL;
         
     | 
| 
       1024 
1149 
     | 
    
         | 
| 
       1025 
     | 
    
         
            -
                    oci8_exec_sql( 
     | 
| 
      
 1150 
     | 
    
         
            +
                    oci8_exec_sql(svcctx,
         
     | 
| 
       1026 
1151 
     | 
    
         
             
                                  "BEGIN\n"
         
     | 
| 
       1027 
1152 
     | 
    
         
             
                                  "  DBMS_APPLICATION_INFO.SET_ACTION(:action);\n"
         
     | 
| 
       1028 
1153 
     | 
    
         
             
                                  "END;\n", 0, NULL, 1, bind_vars, 1);
         
     | 
| 
         @@ -1031,33 +1156,31 @@ static VALUE oci8_set_action(VALUE self, VALUE val) 
     | 
|
| 
       1031 
1156 
     | 
    
         
             
            }
         
     | 
| 
       1032 
1157 
     | 
    
         | 
| 
       1033 
1158 
     | 
    
         
             
            /*
         
     | 
| 
       1034 
     | 
    
         
            -
             *  
     | 
| 
       1035 
     | 
    
         
            -
             *   client_info = string or nil
         
     | 
| 
      
 1159 
     | 
    
         
            +
             * @overload client_info=(client_info)
         
     | 
| 
       1036 
1160 
     | 
    
         
             
             *
         
     | 
| 
       1037 
     | 
    
         
            -
             * 
     | 
| 
       1038 
     | 
    
         
            -
             * This information is stored in the V$SESSION view.
         
     | 
| 
      
 1161 
     | 
    
         
            +
             *  Sets the specified value to {V$SESSION.CLIENT_INFO}[http://docs.oracle.com/database/121/REFRN/refrn30223.htm#r44c1-t21].
         
     | 
| 
       1039 
1162 
     | 
    
         
             
             *
         
     | 
| 
       1040 
     | 
    
         
            -
             * 
     | 
| 
      
 1163 
     | 
    
         
            +
             *  === Oracle 10g client or upper
         
     | 
| 
       1041 
1164 
     | 
    
         
             
             *
         
     | 
| 
       1042 
     | 
    
         
            -
             *  
     | 
| 
       1043 
     | 
    
         
            -
             * 
     | 
| 
       1044 
     | 
    
         
            -
             * etc.
         
     | 
| 
      
 1165 
     | 
    
         
            +
             *  The specified value is sent to the server by piggybacking on the next network
         
     | 
| 
      
 1166 
     | 
    
         
            +
             *  round trip issued by {OCI8#exec}, {OCI8#ping} and so on.
         
     | 
| 
       1045 
1167 
     | 
    
         
             
             *
         
     | 
| 
       1046 
     | 
    
         
            -
             * 
     | 
| 
      
 1168 
     | 
    
         
            +
             *  === Oracle 9i client or lower
         
     | 
| 
       1047 
1169 
     | 
    
         
             
             *
         
     | 
| 
       1048 
     | 
    
         
            -
             * 
     | 
| 
       1049 
     | 
    
         
            -
             * The change is reflected immediately by a network round trip.
         
     | 
| 
      
 1170 
     | 
    
         
            +
             *  This executes the following PL/SQL block internally.
         
     | 
| 
       1050 
1171 
     | 
    
         
             
             *
         
     | 
| 
       1051 
     | 
    
         
            -
             * 
     | 
| 
       1052 
     | 
    
         
            -
             * 
     | 
| 
       1053 
     | 
    
         
            -
             * 
     | 
| 
      
 1172 
     | 
    
         
            +
             *    BEGIN
         
     | 
| 
      
 1173 
     | 
    
         
            +
             *      DBMS_APPLICATION_INFO.SET_CLIENT_INFO(:client_info);
         
     | 
| 
      
 1174 
     | 
    
         
            +
             *    END;
         
     | 
| 
       1054 
1175 
     | 
    
         
             
             *
         
     | 
| 
       1055 
     | 
    
         
            -
             * 
     | 
| 
      
 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]
         
     | 
| 
       1056 
1177 
     | 
    
         
             
             *
         
     | 
| 
       1057 
     | 
    
         
            -
             * 
     | 
| 
      
 1178 
     | 
    
         
            +
             *  @param [String] client_info
         
     | 
| 
      
 1179 
     | 
    
         
            +
             *  @since 2.0.3
         
     | 
| 
       1058 
1180 
     | 
    
         
             
             */
         
     | 
| 
       1059 
1181 
     | 
    
         
             
            static VALUE oci8_set_client_info(VALUE self, VALUE val)
         
     | 
| 
       1060 
1182 
     | 
    
         
             
            {
         
     | 
| 
      
 1183 
     | 
    
         
            +
                oci8_svcctx_t *svcctx = oci8_get_svcctx(self);
         
     | 
| 
       1061 
1184 
     | 
    
         
             
                const char *ptr;
         
     | 
| 
       1062 
1185 
     | 
    
         
             
                ub4 size;
         
     | 
| 
       1063 
1186 
     | 
    
         | 
| 
         @@ -1071,9 +1194,9 @@ static VALUE oci8_set_client_info(VALUE self, VALUE val) 
     | 
|
| 
       1071 
1194 
     | 
    
         
             
                }
         
     | 
| 
       1072 
1195 
     | 
    
         
             
                if (oracle_client_version >= ORAVER_10_1) {
         
     | 
| 
       1073 
1196 
     | 
    
         
             
                    /* Oracle 10g or upper */
         
     | 
| 
       1074 
     | 
    
         
            -
                    chker2(OCIAttrSet( 
     | 
| 
      
 1197 
     | 
    
         
            +
                    chker2(OCIAttrSet(svcctx->usrhp, OCI_HTYPE_SESSION, (dvoid*)ptr,
         
     | 
| 
       1075 
1198 
     | 
    
         
             
                                      size, OCI_ATTR_CLIENT_INFO, oci8_errhp),
         
     | 
| 
       1076 
     | 
    
         
            -
                            
     | 
| 
      
 1199 
     | 
    
         
            +
                           &svcctx->base);
         
     | 
| 
       1077 
1200 
     | 
    
         
             
                } else {
         
     | 
| 
       1078 
1201 
     | 
    
         
             
                    /* Oracle 9i or lower */
         
     | 
| 
       1079 
1202 
     | 
    
         
             
                    oci8_exec_sql_var_t bind_vars[1];
         
     | 
| 
         @@ -1085,7 +1208,7 @@ static VALUE oci8_set_client_info(VALUE self, VALUE val) 
     | 
|
| 
       1085 
1208 
     | 
    
         
             
                    bind_vars[0].indp = NULL;
         
     | 
| 
       1086 
1209 
     | 
    
         
             
                    bind_vars[0].alenp = NULL;
         
     | 
| 
       1087 
1210 
     | 
    
         | 
| 
       1088 
     | 
    
         
            -
                    oci8_exec_sql( 
     | 
| 
      
 1211 
     | 
    
         
            +
                    oci8_exec_sql(svcctx, 
         
     | 
| 
       1089 
1212 
     | 
    
         
             
                                  "BEGIN\n"
         
     | 
| 
       1090 
1213 
     | 
    
         
             
                                  "  DBMS_APPLICATION_INFO.SET_CLIENT_INFO(:client_info);\n"
         
     | 
| 
       1091 
1214 
     | 
    
         
             
                                  "END;\n", 0, NULL, 1, bind_vars, 1);
         
     | 
| 
         @@ -1101,11 +1224,11 @@ void Init_oci8(VALUE *out) 
     | 
|
| 
       1101 
1224 
     | 
    
         
             
                oci8_cOCIHandle = rb_define_class("OCIHandle", rb_cObject);
         
     | 
| 
       1102 
1225 
     | 
    
         
             
                cOCI8 = rb_define_class("OCI8", oci8_cOCIHandle);
         
     | 
| 
       1103 
1226 
     | 
    
         
             
            #endif
         
     | 
| 
       1104 
     | 
    
         
            -
                cOCI8 = oci8_define_class("OCI8", & 
     | 
| 
       1105 
     | 
    
         
            -
                cSession = oci8_define_class_under(cOCI8, "Session", & 
     | 
| 
       1106 
     | 
    
         
            -
                cServer = oci8_define_class_under(cOCI8, "Server", & 
     | 
| 
       1107 
     | 
    
         
            -
                cEnvironment = oci8_define_class_under(cOCI8, "Environment", & 
     | 
| 
       1108 
     | 
    
         
            -
                cProcess = oci8_define_class_under(cOCI8, "Process", & 
     | 
| 
      
 1227 
     | 
    
         
            +
                cOCI8 = oci8_define_class("OCI8", &oci8_svcctx_data_type, oci8_svcctx_alloc);
         
     | 
| 
      
 1228 
     | 
    
         
            +
                cSession = oci8_define_class_under(cOCI8, "Session", &oci8_session_data_type, oci8_session_alloc);
         
     | 
| 
      
 1229 
     | 
    
         
            +
                cServer = oci8_define_class_under(cOCI8, "Server", &oci8_server_data_type, oci8_server_alloc);
         
     | 
| 
      
 1230 
     | 
    
         
            +
                cEnvironment = oci8_define_class_under(cOCI8, "Environment", &oci8_environment_data_type, oci8_environment_alloc);
         
     | 
| 
      
 1231 
     | 
    
         
            +
                cProcess = oci8_define_class_under(cOCI8, "Process", &oci8_process_data_type, oci8_process_alloc);
         
     | 
| 
       1109 
1232 
     | 
    
         
             
                id_at_session_handle = rb_intern("@session_handle");
         
     | 
| 
       1110 
1233 
     | 
    
         
             
                id_at_server_handle = rb_intern("@server_handle");
         
     | 
| 
       1111 
1234 
     | 
    
         | 
| 
         @@ -1130,8 +1253,8 @@ void Init_oci8(VALUE *out) 
     | 
|
| 
       1130 
1253 
     | 
    
         | 
| 
       1131 
1254 
     | 
    
         
             
                rb_define_const(cOCI8, "VERSION", rb_obj_freeze(rb_usascii_str_new_cstr(OCI8LIB_VERSION)));
         
     | 
| 
       1132 
1255 
     | 
    
         
             
                rb_define_singleton_method_nodoc(cOCI8, "oracle_client_vernum", oci8_s_oracle_client_vernum, 0);
         
     | 
| 
       1133 
     | 
    
         
            -
                 
     | 
| 
       1134 
     | 
    
         
            -
                 
     | 
| 
      
 1256 
     | 
    
         
            +
                rb_define_singleton_method_nodoc(cOCI8, "__get_prop", oci8_s_get_prop, 1);
         
     | 
| 
      
 1257 
     | 
    
         
            +
                rb_define_singleton_method_nodoc(cOCI8, "__set_prop", oci8_s_set_prop, 2);
         
     | 
| 
       1135 
1258 
     | 
    
         
             
                rb_define_singleton_method(cOCI8, "error_message", oci8_s_error_message, 1);
         
     | 
| 
       1136 
1259 
     | 
    
         
             
                rb_define_private_method(cOCI8, "parse_connect_string", oci8_parse_connect_string, 1);
         
     | 
| 
       1137 
1260 
     | 
    
         
             
                rb_define_private_method(cOCI8, "logon2", oci8_logon2, 4);
         
     | 
| 
         @@ -1159,7 +1282,7 @@ void Init_oci8(VALUE *out) 
     | 
|
| 
       1159 
1282 
     | 
    
         | 
| 
       1160 
1283 
     | 
    
         
             
            oci8_svcctx_t *oci8_get_svcctx(VALUE obj)
         
     | 
| 
       1161 
1284 
     | 
    
         
             
            {
         
     | 
| 
       1162 
     | 
    
         
            -
                return (oci8_svcctx_t *) 
     | 
| 
      
 1285 
     | 
    
         
            +
                return (oci8_svcctx_t *)oci8_check_typeddata(obj, &oci8_svcctx_data_type, 1);
         
     | 
| 
       1163 
1286 
     | 
    
         
             
            }
         
     | 
| 
       1164 
1287 
     | 
    
         | 
| 
       1165 
1288 
     | 
    
         
             
            OCISession *oci8_get_oci_session(VALUE obj)
         
     |