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/ocidatetime.c
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
/*
|
3
3
|
* ocidatetime.c
|
4
4
|
*
|
5
|
-
* Copyright (C) 2005-
|
5
|
+
* Copyright (C) 2005-2014 Kubo Takehiro <kubo@jiubao.org>
|
6
6
|
*
|
7
7
|
*/
|
8
8
|
#include "oci8.h"
|
@@ -27,37 +27,37 @@ OCIDate *oci8_set_ocidate(OCIDate *od, VALUE val)
|
|
27
27
|
rb_raise(rb_eRuntimeError, "invalid array size %ld", RARRAY_LEN(val));
|
28
28
|
}
|
29
29
|
/* year */
|
30
|
-
year = NUM2LONG(
|
30
|
+
year = NUM2LONG(RARRAY_AREF(val, 0));
|
31
31
|
if (year < -4712 || 9999 < year) {
|
32
32
|
rb_raise(rb_eRuntimeError, "out of year range: %ld", year);
|
33
33
|
}
|
34
34
|
od->OCIDateYYYY = (sb2)year;
|
35
35
|
/* month */
|
36
|
-
month = NUM2LONG(
|
36
|
+
month = NUM2LONG(RARRAY_AREF(val, 1));
|
37
37
|
if (month < 0 || 12 < month) {
|
38
38
|
rb_raise(rb_eRuntimeError, "out of month range: %ld", month);
|
39
39
|
}
|
40
40
|
od->OCIDateMM = (ub1)month;
|
41
41
|
/* day */
|
42
|
-
day = NUM2LONG(
|
42
|
+
day = NUM2LONG(RARRAY_AREF(val, 2));
|
43
43
|
if (day < 0 || 31 < day) {
|
44
44
|
rb_raise(rb_eRuntimeError, "out of day range: %ld", day);
|
45
45
|
}
|
46
46
|
od->OCIDateDD = (ub1)day;
|
47
47
|
/* hour */
|
48
|
-
hour = NUM2LONG(
|
48
|
+
hour = NUM2LONG(RARRAY_AREF(val, 3));
|
49
49
|
if (hour < 0 || 23 < hour) {
|
50
50
|
rb_raise(rb_eRuntimeError, "out of hour range: %ld", hour);
|
51
51
|
}
|
52
52
|
od->OCIDateTime.OCITimeHH = (ub1)hour;
|
53
53
|
/* minute */
|
54
|
-
minute = NUM2LONG(
|
54
|
+
minute = NUM2LONG(RARRAY_AREF(val, 4));
|
55
55
|
if (minute < 0 || 59 < minute) {
|
56
56
|
rb_raise(rb_eRuntimeError, "out of minute range: %ld", minute);
|
57
57
|
}
|
58
58
|
od->OCIDateTime.OCITimeMI = (ub1)minute;
|
59
59
|
/* second */
|
60
|
-
second = NUM2LONG(
|
60
|
+
second = NUM2LONG(RARRAY_AREF(val, 5));
|
61
61
|
if (second < 0 || 59 < second) {
|
62
62
|
rb_raise(rb_eRuntimeError, "out of second range: %ld", second);
|
63
63
|
}
|
@@ -149,42 +149,42 @@ OCIDateTime *oci8_set_ocitimestamp_tz(OCIDateTime *dttm, VALUE val, VALUE svc)
|
|
149
149
|
rb_raise(rb_eRuntimeError, "invalid array size %ld", RARRAY_LEN(val));
|
150
150
|
}
|
151
151
|
/* year */
|
152
|
-
year = NUM2LONG(
|
152
|
+
year = NUM2LONG(RARRAY_AREF(val, 0));
|
153
153
|
if (year < -4712 || 9999 < year) {
|
154
154
|
rb_raise(rb_eRuntimeError, "out of year range: %ld", year);
|
155
155
|
}
|
156
156
|
/* month */
|
157
|
-
month = NUM2LONG(
|
157
|
+
month = NUM2LONG(RARRAY_AREF(val, 1));
|
158
158
|
if (month < 0 || 12 < month) {
|
159
159
|
rb_raise(rb_eRuntimeError, "out of month range: %ld", month);
|
160
160
|
}
|
161
161
|
/* day */
|
162
|
-
day = NUM2LONG(
|
162
|
+
day = NUM2LONG(RARRAY_AREF(val, 2));
|
163
163
|
if (day < 0 || 31 < day) {
|
164
164
|
rb_raise(rb_eRuntimeError, "out of day range: %ld", day);
|
165
165
|
}
|
166
166
|
/* hour */
|
167
|
-
hour = NUM2LONG(
|
167
|
+
hour = NUM2LONG(RARRAY_AREF(val, 3));
|
168
168
|
if (hour < 0 || 23 < hour) {
|
169
169
|
rb_raise(rb_eRuntimeError, "out of hour range: %ld", hour);
|
170
170
|
}
|
171
171
|
/* minute */
|
172
|
-
minute = NUM2LONG(
|
172
|
+
minute = NUM2LONG(RARRAY_AREF(val, 4));
|
173
173
|
if (minute < 0 || 60 < minute) {
|
174
174
|
rb_raise(rb_eRuntimeError, "out of minute range: %ld", minute);
|
175
175
|
}
|
176
176
|
/* second */
|
177
|
-
sec = NUM2LONG(
|
177
|
+
sec = NUM2LONG(RARRAY_AREF(val, 5));
|
178
178
|
if (sec < 0 || 60 < sec) {
|
179
179
|
rb_raise(rb_eRuntimeError, "out of second range: %ld", sec);
|
180
180
|
}
|
181
181
|
/* sec_fraction */
|
182
|
-
fsec = NUM2LONG(
|
182
|
+
fsec = NUM2LONG(RARRAY_AREF(val, 6));
|
183
183
|
if (fsec < 0 || 1000000000 < fsec) {
|
184
184
|
rb_raise(rb_eRuntimeError, "out of sec_fraction range: %ld", fsec);
|
185
185
|
}
|
186
186
|
/* time zone */
|
187
|
-
if (NIL_P(
|
187
|
+
if (NIL_P(RARRAY_AREF(val, 7)) && NIL_P(RARRAY_AREF(val, 8))) {
|
188
188
|
if (!NIL_P(svc)) {
|
189
189
|
/* use session timezone. */
|
190
190
|
seshp = oci8_get_oci_session(svc);
|
@@ -193,8 +193,8 @@ OCIDateTime *oci8_set_ocitimestamp_tz(OCIDateTime *dttm, VALUE val, VALUE svc)
|
|
193
193
|
tzlen = 0;
|
194
194
|
} else {
|
195
195
|
snprintf(tz_str, sizeof(tz_str), "%+02ld:%02ld",
|
196
|
-
NUM2LONG(
|
197
|
-
NUM2LONG(
|
196
|
+
NUM2LONG(RARRAY_AREF(val, 7)),
|
197
|
+
NUM2LONG(RARRAY_AREF(val, 8)));
|
198
198
|
tz_str[sizeof(tz_str) - 1] = '\0';
|
199
199
|
tz = (OraText*)tz_str;
|
200
200
|
tzlen = strlen(tz_str);
|
@@ -232,9 +232,20 @@ static void bind_ocitimestamp_free(oci8_base_t *base)
|
|
232
232
|
bind_free_common(base, OCI_DTYPE_TIMESTAMP);
|
233
233
|
}
|
234
234
|
|
235
|
-
static const
|
235
|
+
static const oci8_bind_data_type_t bind_ocitimestamp_data_type = {
|
236
236
|
{
|
237
|
-
|
237
|
+
{
|
238
|
+
"OCI8::BindType::OCITimestamp",
|
239
|
+
{
|
240
|
+
NULL,
|
241
|
+
oci8_handle_cleanup,
|
242
|
+
oci8_handle_size,
|
243
|
+
},
|
244
|
+
&oci8_bind_data_type.rb_data_type, NULL,
|
245
|
+
#ifdef RUBY_TYPED_WB_PROTECTED
|
246
|
+
RUBY_TYPED_WB_PROTECTED,
|
247
|
+
#endif
|
248
|
+
},
|
238
249
|
bind_ocitimestamp_free,
|
239
250
|
sizeof(oci8_bind_t)
|
240
251
|
},
|
@@ -246,6 +257,11 @@ static const oci8_bind_vtable_t bind_ocitimestamp_vtable = {
|
|
246
257
|
SQLT_TIMESTAMP
|
247
258
|
};
|
248
259
|
|
260
|
+
static VALUE bind_ocitimestamp_alloc(VALUE klass)
|
261
|
+
{
|
262
|
+
return oci8_allocate_typeddata(klass, &bind_ocitimestamp_data_type.base);
|
263
|
+
}
|
264
|
+
|
249
265
|
static VALUE bind_ocitimestamp_tz_get(oci8_bind_t *obind, void *data, void *null_struct)
|
250
266
|
{
|
251
267
|
return oci8_make_ocitimestamp(*(OCIDateTime **)data, TRUE);
|
@@ -288,9 +304,20 @@ static void bind_ocitimestamp_tz_free(oci8_base_t *base)
|
|
288
304
|
bind_free_common(base, OCI_DTYPE_TIMESTAMP_TZ);
|
289
305
|
}
|
290
306
|
|
291
|
-
static const
|
307
|
+
static const oci8_bind_data_type_t bind_ocitimestamp_tz_data_type = {
|
292
308
|
{
|
293
|
-
|
309
|
+
{
|
310
|
+
"OCI8::BindType::OCITimestampTZ",
|
311
|
+
{
|
312
|
+
NULL,
|
313
|
+
oci8_handle_cleanup,
|
314
|
+
oci8_handle_size,
|
315
|
+
},
|
316
|
+
&oci8_bind_data_type.rb_data_type, NULL,
|
317
|
+
#ifdef RUBY_TYPED_WB_PROTECTED
|
318
|
+
RUBY_TYPED_WB_PROTECTED,
|
319
|
+
#endif
|
320
|
+
},
|
294
321
|
bind_ocitimestamp_tz_free,
|
295
322
|
sizeof(oci8_bind_t)
|
296
323
|
},
|
@@ -302,6 +329,11 @@ static const oci8_bind_vtable_t bind_ocitimestamp_tz_vtable = {
|
|
302
329
|
SQLT_TIMESTAMP_TZ
|
303
330
|
};
|
304
331
|
|
332
|
+
static VALUE bind_ocitimestamp_tz_alloc(VALUE klass)
|
333
|
+
{
|
334
|
+
return oci8_allocate_typeddata(klass, &bind_ocitimestamp_tz_data_type.base);
|
335
|
+
}
|
336
|
+
|
305
337
|
VALUE oci8_make_ociinterval_ym(OCIInterval *s)
|
306
338
|
{
|
307
339
|
sb4 year;
|
@@ -320,8 +352,8 @@ OCIInterval *oci8_set_ociinterval_ym(OCIInterval *intvl, VALUE val)
|
|
320
352
|
if (RARRAY_LEN(val) != 2) {
|
321
353
|
rb_raise(rb_eRuntimeError, "invalid array size %ld", RARRAY_LEN(val));
|
322
354
|
}
|
323
|
-
year = NUM2INT(
|
324
|
-
month = NUM2INT(
|
355
|
+
year = NUM2INT(RARRAY_AREF(val, 0));
|
356
|
+
month = NUM2INT(RARRAY_AREF(val, 1));
|
325
357
|
if (oracle_client_version >= ORAVERNUM(9, 2, 0, 3, 0)) {
|
326
358
|
chkerr(OCIIntervalSetYearMonth(oci8_envhp, oci8_errhp,
|
327
359
|
year, month, intvl));
|
@@ -372,11 +404,11 @@ OCIInterval *oci8_set_ociinterval_ds(OCIInterval *intvl, VALUE val)
|
|
372
404
|
if (RARRAY_LEN(val) != 5) {
|
373
405
|
rb_raise(rb_eRuntimeError, "invalid array size %ld", RARRAY_LEN(val));
|
374
406
|
}
|
375
|
-
day = NUM2INT(
|
376
|
-
hour = NUM2INT(
|
377
|
-
minute = NUM2INT(
|
378
|
-
sec = NUM2INT(
|
379
|
-
fsec = NUM2INT(
|
407
|
+
day = NUM2INT(RARRAY_AREF(val, 0));
|
408
|
+
hour = NUM2INT(RARRAY_AREF(val, 1));
|
409
|
+
minute = NUM2INT(RARRAY_AREF(val, 2));
|
410
|
+
sec = NUM2INT(RARRAY_AREF(val, 3));
|
411
|
+
fsec = NUM2INT(RARRAY_AREF(val, 4));
|
380
412
|
if (oracle_client_version >= ORAVERNUM(9, 2, 0, 3, 0)) {
|
381
413
|
chkerr(OCIIntervalSetDaySecond(oci8_envhp, oci8_errhp,
|
382
414
|
day, hour, minute, sec, fsec, intvl));
|
@@ -447,9 +479,20 @@ static void bind_ociinterval_ds_free(oci8_base_t *base)
|
|
447
479
|
bind_free_common(base, OCI_DTYPE_INTERVAL_DS);
|
448
480
|
}
|
449
481
|
|
450
|
-
static const
|
482
|
+
static const oci8_bind_data_type_t bind_ociinterval_ym_data_type = {
|
451
483
|
{
|
452
|
-
|
484
|
+
{
|
485
|
+
"OCI8::BindType::OCIIntervalYM",
|
486
|
+
{
|
487
|
+
NULL,
|
488
|
+
oci8_handle_cleanup,
|
489
|
+
oci8_handle_size,
|
490
|
+
},
|
491
|
+
&oci8_bind_data_type.rb_data_type, NULL,
|
492
|
+
#ifdef RUBY_TYPED_WB_PROTECTED
|
493
|
+
RUBY_TYPED_WB_PROTECTED,
|
494
|
+
#endif
|
495
|
+
},
|
453
496
|
bind_ociinterval_ym_free,
|
454
497
|
sizeof(oci8_bind_t)
|
455
498
|
},
|
@@ -461,9 +504,25 @@ static const oci8_bind_vtable_t bind_ociinterval_ym_vtable = {
|
|
461
504
|
SQLT_INTERVAL_YM
|
462
505
|
};
|
463
506
|
|
464
|
-
static
|
507
|
+
static VALUE bind_ociinterval_ym_alloc(VALUE klass)
|
508
|
+
{
|
509
|
+
return oci8_allocate_typeddata(klass, &bind_ociinterval_ym_data_type.base);
|
510
|
+
}
|
511
|
+
|
512
|
+
static const oci8_bind_data_type_t bind_ociinterval_ds_data_type = {
|
465
513
|
{
|
466
|
-
|
514
|
+
{
|
515
|
+
"OCI8::BindType::OCIIntervalDS",
|
516
|
+
{
|
517
|
+
NULL,
|
518
|
+
oci8_handle_cleanup,
|
519
|
+
oci8_handle_size,
|
520
|
+
},
|
521
|
+
&oci8_bind_data_type.rb_data_type, NULL,
|
522
|
+
#ifdef RUBY_TYPED_WB_PROTECTED
|
523
|
+
RUBY_TYPED_WB_PROTECTED,
|
524
|
+
#endif
|
525
|
+
},
|
467
526
|
bind_ociinterval_ds_free,
|
468
527
|
sizeof(oci8_bind_t)
|
469
528
|
},
|
@@ -475,10 +534,15 @@ static const oci8_bind_vtable_t bind_ociinterval_ds_vtable = {
|
|
475
534
|
SQLT_INTERVAL_DS
|
476
535
|
};
|
477
536
|
|
537
|
+
static VALUE bind_ociinterval_ds_alloc(VALUE klass)
|
538
|
+
{
|
539
|
+
return oci8_allocate_typeddata(klass, &bind_ociinterval_ds_data_type.base);
|
540
|
+
}
|
541
|
+
|
478
542
|
void Init_oci_datetime(void)
|
479
543
|
{
|
480
|
-
oci8_define_bind_class("OCITimestamp", &
|
481
|
-
oci8_define_bind_class("OCITimestampTZ", &
|
482
|
-
oci8_define_bind_class("OCIIntervalYM", &
|
483
|
-
oci8_define_bind_class("OCIIntervalDS", &
|
544
|
+
oci8_define_bind_class("OCITimestamp", &bind_ocitimestamp_data_type, bind_ocitimestamp_alloc);
|
545
|
+
oci8_define_bind_class("OCITimestampTZ", &bind_ocitimestamp_tz_data_type, bind_ocitimestamp_tz_alloc);
|
546
|
+
oci8_define_bind_class("OCIIntervalYM", &bind_ociinterval_ym_data_type, bind_ociinterval_ym_alloc);
|
547
|
+
oci8_define_bind_class("OCIIntervalDS", &bind_ociinterval_ds_data_type, bind_ociinterval_ds_alloc);
|
484
548
|
}
|
data/ext/oci8/ocihandle.c
CHANGED
@@ -2,13 +2,15 @@
|
|
2
2
|
/*
|
3
3
|
* ocihandle.c
|
4
4
|
*
|
5
|
-
* Copyright (C) 2009-
|
5
|
+
* Copyright (C) 2009-2015 Kubo Takehiro <kubo@jiubao.org>
|
6
6
|
*
|
7
7
|
* implement OCIHandle
|
8
8
|
*
|
9
9
|
*/
|
10
10
|
#include "oci8.h"
|
11
11
|
|
12
|
+
#define TO_HANDLE(obj) ((oci8_base_t*)oci8_check_typeddata((obj), &oci8_handle_data_type, 1))
|
13
|
+
|
12
14
|
#ifdef _MSC_VER
|
13
15
|
#define MAGIC_NUMBER 0xDEAFBEAFDEAFBEAFui64;
|
14
16
|
#else
|
@@ -25,9 +27,19 @@ static long check_data_range(VALUE val, long min, long max, const char *type)
|
|
25
27
|
return lval;
|
26
28
|
}
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
-
|
30
|
+
const oci8_handle_data_type_t oci8_handle_data_type = {
|
31
|
+
{
|
32
|
+
"OCIHandle",
|
33
|
+
{
|
34
|
+
NULL,
|
35
|
+
oci8_handle_cleanup,
|
36
|
+
oci8_handle_size,
|
37
|
+
},
|
38
|
+
NULL, NULL,
|
39
|
+
#ifdef RUBY_TYPED_WB_PROTECTED
|
40
|
+
RUBY_TYPED_WB_PROTECTED,
|
41
|
+
#endif
|
42
|
+
},
|
31
43
|
NULL,
|
32
44
|
sizeof(oci8_base_t),
|
33
45
|
};
|
@@ -38,10 +50,10 @@ static VALUE oci8_handle_initialize(VALUE self)
|
|
38
50
|
}
|
39
51
|
|
40
52
|
/*
|
41
|
-
*
|
53
|
+
* Clears the object internal structure and its dependents.
|
42
54
|
*
|
43
|
-
*
|
44
|
-
*
|
55
|
+
* @since 2.0.0
|
56
|
+
* @private
|
45
57
|
*/
|
46
58
|
static VALUE oci8_handle_free(VALUE self)
|
47
59
|
{
|
@@ -51,14 +63,9 @@ static VALUE oci8_handle_free(VALUE self)
|
|
51
63
|
return self;
|
52
64
|
}
|
53
65
|
|
54
|
-
|
55
|
-
{
|
56
|
-
if (base->vptr->mark != NULL)
|
57
|
-
base->vptr->mark(base);
|
58
|
-
}
|
59
|
-
|
60
|
-
static void oci8_handle_cleanup(oci8_base_t *base)
|
66
|
+
void oci8_handle_cleanup(void *ptr)
|
61
67
|
{
|
68
|
+
oci8_base_t *base = (oci8_base_t *)ptr;
|
62
69
|
if (oci8_in_finalizer) {
|
63
70
|
/* Do nothing when the program exits.
|
64
71
|
* The first two words of memory addressed by VALUE datatype is
|
@@ -71,35 +78,43 @@ static void oci8_handle_cleanup(oci8_base_t *base)
|
|
71
78
|
xfree(base);
|
72
79
|
}
|
73
80
|
|
81
|
+
size_t oci8_handle_size(const void *ptr)
|
82
|
+
{
|
83
|
+
const oci8_base_t *base = (const oci8_base_t *)ptr;
|
84
|
+
const oci8_bind_t *bind = (const oci8_bind_t *)ptr;
|
85
|
+
size_t size = base->data_type->size;
|
86
|
+
|
87
|
+
if (base->hp.ptr != NULL) {
|
88
|
+
size += 256; /* I don't know the real size. Use 256 for now. */
|
89
|
+
}
|
90
|
+
switch (base->type) {
|
91
|
+
case OCI_HTYPE_DEFINE:
|
92
|
+
case OCI_HTYPE_BIND:
|
93
|
+
size += bind->alloc_sz * (bind->maxar_sz ? bind->maxar_sz : 1);
|
94
|
+
}
|
95
|
+
return size;
|
96
|
+
}
|
97
|
+
|
74
98
|
static VALUE oci8_s_allocate(VALUE klass)
|
99
|
+
{
|
100
|
+
return oci8_allocate_typeddata(klass, &oci8_handle_data_type);
|
101
|
+
}
|
102
|
+
|
103
|
+
VALUE oci8_allocate_typeddata(VALUE klass, const oci8_handle_data_type_t *data_type)
|
75
104
|
{
|
76
105
|
oci8_base_t *base;
|
77
|
-
const oci8_base_vtable_t *vptr;
|
78
|
-
VALUE superklass;
|
79
106
|
VALUE obj;
|
80
107
|
|
81
|
-
|
82
|
-
|
83
|
-
superklass = rb_class_superclass(superklass);
|
84
|
-
if (superklass == rb_cObject)
|
85
|
-
rb_raise(rb_eRuntimeError, "private method `new' called for %s:Class", rb_class2name(klass));
|
86
|
-
}
|
87
|
-
obj = rb_ivar_get(superklass, oci8_id_oci8_vtable);
|
88
|
-
vptr = DATA_PTR(obj);
|
89
|
-
|
90
|
-
base = xmalloc(vptr->size);
|
91
|
-
memset(base, 0, vptr->size);
|
108
|
+
base = xmalloc(data_type->size);
|
109
|
+
memset(base, 0, data_type->size);
|
92
110
|
|
93
|
-
obj =
|
111
|
+
obj = TypedData_Wrap_Struct(klass, &data_type->rb_data_type, base);
|
94
112
|
base->self = obj;
|
95
|
-
base->
|
113
|
+
base->data_type = data_type;
|
96
114
|
base->parent = NULL;
|
97
115
|
base->next = base;
|
98
116
|
base->prev = base;
|
99
117
|
base->children = NULL;
|
100
|
-
if (vptr->init != NULL) {
|
101
|
-
vptr->init(base);
|
102
|
-
}
|
103
118
|
return obj;
|
104
119
|
}
|
105
120
|
|
@@ -121,7 +136,7 @@ enum datatype {
|
|
121
136
|
|
122
137
|
static VALUE attr_get_common(int argc, VALUE *argv, VALUE self, enum datatype datatype)
|
123
138
|
{
|
124
|
-
oci8_base_t *base =
|
139
|
+
oci8_base_t *base = oci8_check_typeddata(self, &oci8_handle_data_type, 0);
|
125
140
|
VALUE attr_type;
|
126
141
|
VALUE strict;
|
127
142
|
VALUE args[6];
|
@@ -141,8 +156,24 @@ static VALUE attr_get_common(int argc, VALUE *argv, VALUE self, enum datatype da
|
|
141
156
|
ub4 size = 0;
|
142
157
|
sword rv;
|
143
158
|
|
144
|
-
if (base->
|
145
|
-
|
159
|
+
if (base->closed) {
|
160
|
+
/* Returns nil when the backtrace includes `inspect'.
|
161
|
+
* Otherwise, raises an exception.
|
162
|
+
* IMO, `inspect' should not raise an exception.
|
163
|
+
*/
|
164
|
+
volatile VALUE backtrace = rb_funcall(rb_cObject, rb_intern("caller"), 0);
|
165
|
+
if (TYPE(backtrace) == T_ARRAY) {
|
166
|
+
int i;
|
167
|
+
for (i = 0; i < RARRAY_LEN(backtrace); i++) {
|
168
|
+
volatile VALUE elem = RARRAY_AREF(backtrace, i);
|
169
|
+
char *s = StringValueCStr(elem);
|
170
|
+
if (strstr(s, "inspect") != NULL) {
|
171
|
+
return Qnil;
|
172
|
+
}
|
173
|
+
}
|
174
|
+
}
|
175
|
+
/* check again just to raise an exception. */
|
176
|
+
oci8_check_typeddata(self, &oci8_handle_data_type, 1);
|
146
177
|
}
|
147
178
|
|
148
179
|
v.ub8val = MAGIC_NUMBER;
|
@@ -210,17 +241,16 @@ static VALUE attr_get_common(int argc, VALUE *argv, VALUE self, enum datatype da
|
|
210
241
|
}
|
211
242
|
|
212
243
|
/*
|
213
|
-
*
|
214
|
-
* attr_get_ub1(attr_type, strict = true)
|
244
|
+
* @overload attr_get_ub1(attr_type, strict = true)
|
215
245
|
*
|
216
|
-
*
|
246
|
+
* Gets the value of an attribute as `ub1' datatype.
|
217
247
|
*
|
218
|
-
*
|
219
|
-
*
|
220
|
-
*
|
248
|
+
* @param [Fixnum] attr_type
|
249
|
+
* @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
|
250
|
+
* @return [Fixnum]
|
221
251
|
*
|
222
|
-
*
|
223
|
-
*
|
252
|
+
* @since 2.0.4
|
253
|
+
* @private
|
224
254
|
*/
|
225
255
|
static VALUE attr_get_ub1(int argc, VALUE *argv, VALUE self)
|
226
256
|
{
|
@@ -228,17 +258,16 @@ static VALUE attr_get_ub1(int argc, VALUE *argv, VALUE self)
|
|
228
258
|
}
|
229
259
|
|
230
260
|
/*
|
231
|
-
*
|
232
|
-
* attr_get_ub2(attr_type, strict = true)
|
261
|
+
* @overload attr_get_ub2(attr_type, strict = true)
|
233
262
|
*
|
234
|
-
*
|
263
|
+
* Gets the value of an attribute as `ub2' datatype.
|
235
264
|
*
|
236
|
-
*
|
237
|
-
*
|
238
|
-
*
|
265
|
+
* @param [Fixnum] attr_type
|
266
|
+
* @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
|
267
|
+
* @return [Fixnum]
|
239
268
|
*
|
240
|
-
*
|
241
|
-
*
|
269
|
+
* @since 2.0.4
|
270
|
+
* @private
|
242
271
|
*/
|
243
272
|
static VALUE attr_get_ub2(int argc, VALUE *argv, VALUE self)
|
244
273
|
{
|
@@ -246,17 +275,16 @@ static VALUE attr_get_ub2(int argc, VALUE *argv, VALUE self)
|
|
246
275
|
}
|
247
276
|
|
248
277
|
/*
|
249
|
-
*
|
250
|
-
* attr_get_ub4(attr_type, strict = true)
|
278
|
+
* @overload attr_get_ub4(attr_type, strict = true)
|
251
279
|
*
|
252
|
-
*
|
280
|
+
* Gets the value of an attribute as `ub4' datatype.
|
253
281
|
*
|
254
|
-
*
|
255
|
-
*
|
256
|
-
*
|
282
|
+
* @param [Fixnum] attr_type
|
283
|
+
* @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
|
284
|
+
* @return [Integer]
|
257
285
|
*
|
258
|
-
*
|
259
|
-
*
|
286
|
+
* @since 2.0.4
|
287
|
+
* @private
|
260
288
|
*/
|
261
289
|
static VALUE attr_get_ub4(int argc, VALUE *argv, VALUE self)
|
262
290
|
{
|
@@ -264,17 +292,16 @@ static VALUE attr_get_ub4(int argc, VALUE *argv, VALUE self)
|
|
264
292
|
}
|
265
293
|
|
266
294
|
/*
|
267
|
-
*
|
268
|
-
* attr_get_ub8(attr_type, strict = true)
|
295
|
+
* @overload attr_get_ub8(attr_type, strict = true)
|
269
296
|
*
|
270
|
-
*
|
297
|
+
* Gets the value of an attribute as `ub8' datatype.
|
271
298
|
*
|
272
|
-
*
|
273
|
-
*
|
274
|
-
*
|
299
|
+
* @param [Fixnum] attr_type
|
300
|
+
* @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
|
301
|
+
* @return [Integer]
|
275
302
|
*
|
276
|
-
*
|
277
|
-
*
|
303
|
+
* @since 2.0.4
|
304
|
+
* @private
|
278
305
|
*/
|
279
306
|
static VALUE attr_get_ub8(int argc, VALUE *argv, VALUE self)
|
280
307
|
{
|
@@ -282,17 +309,16 @@ static VALUE attr_get_ub8(int argc, VALUE *argv, VALUE self)
|
|
282
309
|
}
|
283
310
|
|
284
311
|
/*
|
285
|
-
*
|
286
|
-
* attr_get_sb1(attr_type, strict = true)
|
312
|
+
* @overload attr_get_sb1(attr_type, strict = true)
|
287
313
|
*
|
288
|
-
*
|
314
|
+
* Gets the value of an attribute as `sb1' datatype.
|
289
315
|
*
|
290
|
-
*
|
291
|
-
*
|
292
|
-
*
|
316
|
+
* @param [Fixnum] attr_type
|
317
|
+
* @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
|
318
|
+
* @return [Fixnum]
|
293
319
|
*
|
294
|
-
*
|
295
|
-
*
|
320
|
+
* @since 2.0.4
|
321
|
+
* @private
|
296
322
|
*/
|
297
323
|
static VALUE attr_get_sb1(int argc, VALUE *argv, VALUE self)
|
298
324
|
{
|
@@ -300,17 +326,16 @@ static VALUE attr_get_sb1(int argc, VALUE *argv, VALUE self)
|
|
300
326
|
}
|
301
327
|
|
302
328
|
/*
|
303
|
-
*
|
304
|
-
* attr_get_sb2(attr_type, strict = true)
|
329
|
+
* @overload attr_get_sb2(attr_type, strict = true)
|
305
330
|
*
|
306
|
-
*
|
331
|
+
* Gets the value of an attribute as `sb2' datatype.
|
307
332
|
*
|
308
|
-
*
|
309
|
-
*
|
310
|
-
*
|
333
|
+
* @param [Fixnum] attr_type
|
334
|
+
* @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
|
335
|
+
* @return [Fixnum]
|
311
336
|
*
|
312
|
-
*
|
313
|
-
*
|
337
|
+
* @since 2.0.4
|
338
|
+
* @private
|
314
339
|
*/
|
315
340
|
static VALUE attr_get_sb2(int argc, VALUE *argv, VALUE self)
|
316
341
|
{
|
@@ -318,17 +343,16 @@ static VALUE attr_get_sb2(int argc, VALUE *argv, VALUE self)
|
|
318
343
|
}
|
319
344
|
|
320
345
|
/*
|
321
|
-
*
|
322
|
-
* attr_get_sb4(attr_type, strict = true)
|
346
|
+
* @overload attr_get_sb4(attr_type, strict = true)
|
323
347
|
*
|
324
|
-
*
|
348
|
+
* Gets the value of an attribute as `sb4' datatype.
|
325
349
|
*
|
326
|
-
*
|
327
|
-
*
|
328
|
-
*
|
350
|
+
* @param [Fixnum] attr_type
|
351
|
+
* @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
|
352
|
+
* @return [Integer]
|
329
353
|
*
|
330
|
-
*
|
331
|
-
*
|
354
|
+
* @since 2.0.4
|
355
|
+
* @private
|
332
356
|
*/
|
333
357
|
static VALUE attr_get_sb4(int argc, VALUE *argv, VALUE self)
|
334
358
|
{
|
@@ -336,17 +360,16 @@ static VALUE attr_get_sb4(int argc, VALUE *argv, VALUE self)
|
|
336
360
|
}
|
337
361
|
|
338
362
|
/*
|
339
|
-
*
|
340
|
-
* attr_get_sb8(attr_type, strict = true)
|
363
|
+
* @overload attr_get_sb8(attr_type, strict = true)
|
341
364
|
*
|
342
|
-
*
|
365
|
+
* Gets the value of an attribute as `sb8' datatype.
|
343
366
|
*
|
344
|
-
*
|
345
|
-
*
|
346
|
-
*
|
367
|
+
* @param [Fixnum] attr_type
|
368
|
+
* @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
|
369
|
+
* @return [Integer]
|
347
370
|
*
|
348
|
-
*
|
349
|
-
*
|
371
|
+
* @since 2.0.4
|
372
|
+
* @private
|
350
373
|
*/
|
351
374
|
static VALUE attr_get_sb8(int argc, VALUE *argv, VALUE self)
|
352
375
|
{
|
@@ -354,17 +377,16 @@ static VALUE attr_get_sb8(int argc, VALUE *argv, VALUE self)
|
|
354
377
|
}
|
355
378
|
|
356
379
|
/*
|
357
|
-
*
|
358
|
-
* attr_get_boolean(attr_type, strict = true)
|
380
|
+
* @overload attr_get_boolean(attr_type, strict = true)
|
359
381
|
*
|
360
|
-
*
|
382
|
+
* Gets the value of an attribute as `boolean' datatype.
|
361
383
|
*
|
362
|
-
*
|
363
|
-
*
|
364
|
-
*
|
384
|
+
* @param [Fixnum] attr_type
|
385
|
+
* @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
|
386
|
+
* @return [true of false]
|
365
387
|
*
|
366
|
-
*
|
367
|
-
*
|
388
|
+
* @since 2.0.4
|
389
|
+
* @private
|
368
390
|
*/
|
369
391
|
static VALUE attr_get_boolean(int argc, VALUE *argv, VALUE self)
|
370
392
|
{
|
@@ -372,22 +394,21 @@ static VALUE attr_get_boolean(int argc, VALUE *argv, VALUE self)
|
|
372
394
|
}
|
373
395
|
|
374
396
|
/*
|
375
|
-
*
|
376
|
-
* attr_get_string(attr_type, strict = true)
|
397
|
+
* @overload attr_get_string(attr_type, strict = true)
|
377
398
|
*
|
378
|
-
*
|
379
|
-
*
|
380
|
-
*
|
399
|
+
* Gets the value of an attribute as `oratext *' datatype.
|
400
|
+
* The return value is converted to Encoding.default_internal or
|
401
|
+
* tagged with {OCI8.encoding} when the ruby version is 1.9.
|
381
402
|
*
|
382
|
-
*
|
383
|
-
*
|
403
|
+
* @note If the specified attr_type's datatype is not a
|
404
|
+
* pointer type, it causes a segmentation fault.
|
384
405
|
*
|
385
|
-
*
|
386
|
-
*
|
387
|
-
*
|
406
|
+
* @param [Fixnum] attr_type
|
407
|
+
* @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
|
408
|
+
* @return [String]
|
388
409
|
*
|
389
|
-
*
|
390
|
-
*
|
410
|
+
* @since 2.0.4
|
411
|
+
* @private
|
391
412
|
*/
|
392
413
|
static VALUE attr_get_string(int argc, VALUE *argv, VALUE self)
|
393
414
|
{
|
@@ -395,21 +416,20 @@ static VALUE attr_get_string(int argc, VALUE *argv, VALUE self)
|
|
395
416
|
}
|
396
417
|
|
397
418
|
/*
|
398
|
-
*
|
399
|
-
* attr_get_binary(attr_type, strict = true)
|
419
|
+
* @overload attr_get_binary(attr_type, strict = true)
|
400
420
|
*
|
401
|
-
*
|
402
|
-
*
|
421
|
+
* Gets the value of an attribute as `ub1 *' datatype.
|
422
|
+
* The return value is tagged with ASCII-8BIT when the ruby version is 1.9.
|
403
423
|
*
|
404
|
-
*
|
405
|
-
*
|
424
|
+
* @note If the specified attr_type's datatype is not a
|
425
|
+
* pointer type, it causes a segmentation fault.
|
406
426
|
*
|
407
|
-
*
|
408
|
-
*
|
409
|
-
*
|
427
|
+
* @param [Fixnum] attr_type
|
428
|
+
* @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
|
429
|
+
* @return [String]
|
410
430
|
*
|
411
|
-
*
|
412
|
-
*
|
431
|
+
* @since 2.0.4
|
432
|
+
* @private
|
413
433
|
*/
|
414
434
|
static VALUE attr_get_binary(int argc, VALUE *argv, VALUE self)
|
415
435
|
{
|
@@ -417,21 +437,20 @@ static VALUE attr_get_binary(int argc, VALUE *argv, VALUE self)
|
|
417
437
|
}
|
418
438
|
|
419
439
|
/*
|
420
|
-
*
|
421
|
-
* attr_get_integer(attr_type, strict = true)
|
440
|
+
* @overload attr_get_integer(attr_type, strict = true)
|
422
441
|
*
|
423
|
-
*
|
424
|
-
*
|
442
|
+
* Gets the value of an attribute as `ub1 *' datatype.
|
443
|
+
* The return value is converted to Integer from internal Oracle NUMBER format.
|
425
444
|
*
|
426
|
-
*
|
427
|
-
*
|
445
|
+
* @note If the specified attr_type's datatype is not a
|
446
|
+
* pointer type, it causes a segmentation fault.
|
428
447
|
*
|
429
|
-
*
|
430
|
-
*
|
431
|
-
*
|
448
|
+
* @param [Fixnum] attr_type
|
449
|
+
* @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
|
450
|
+
* @return [Fixnum]
|
432
451
|
*
|
433
|
-
*
|
434
|
-
*
|
452
|
+
* @since 2.0.4
|
453
|
+
* @private
|
435
454
|
*/
|
436
455
|
static VALUE attr_get_integer(int argc, VALUE *argv, VALUE self)
|
437
456
|
{
|
@@ -439,21 +458,20 @@ static VALUE attr_get_integer(int argc, VALUE *argv, VALUE self)
|
|
439
458
|
}
|
440
459
|
|
441
460
|
/*
|
442
|
-
*
|
443
|
-
* attr_get_oradate(attr_type, strict = true)
|
461
|
+
* @overload attr_get_oradate(attr_type, strict = true)
|
444
462
|
*
|
445
|
-
*
|
446
|
-
*
|
463
|
+
* Gets the value of an attribute as `ub1 *' datatype.
|
464
|
+
* The return value is converted to OraDate.
|
447
465
|
*
|
448
|
-
*
|
449
|
-
*
|
466
|
+
* @note If the specified attr_type's datatype is not a
|
467
|
+
* pointer type, it causes a segmentation fault.
|
450
468
|
*
|
451
|
-
*
|
452
|
-
*
|
453
|
-
*
|
469
|
+
* @param [Fixnum] attr_type
|
470
|
+
* @param [Boolean] strict If false, "ORA-24328: illegal attribute value" is ignored.
|
471
|
+
* @return [OraDate]
|
454
472
|
*
|
455
|
-
*
|
456
|
-
*
|
473
|
+
* @since 2.0.4
|
474
|
+
* @private
|
457
475
|
*/
|
458
476
|
static VALUE attr_get_oradate(int argc, VALUE *argv, VALUE self)
|
459
477
|
{
|
@@ -461,24 +479,23 @@ static VALUE attr_get_oradate(int argc, VALUE *argv, VALUE self)
|
|
461
479
|
}
|
462
480
|
|
463
481
|
/*
|
464
|
-
*
|
465
|
-
* attr_set_ub1(attr_type, attr_value)
|
482
|
+
* @overload attr_set_ub1(attr_type, attr_value)
|
466
483
|
*
|
467
|
-
*
|
484
|
+
* Sets the value of an attribute as `ub1' datatype.
|
468
485
|
*
|
469
|
-
*
|
470
|
-
*
|
486
|
+
* @note If the specified attr_type's datatype is a
|
487
|
+
* pointer type, it causes a segmentation fault.
|
471
488
|
*
|
472
|
-
*
|
473
|
-
*
|
474
|
-
*
|
489
|
+
* @param [Fixnum] attr_type
|
490
|
+
* @param [Fixnum] attr_value
|
491
|
+
* @return [self]
|
475
492
|
*
|
476
|
-
*
|
477
|
-
*
|
493
|
+
* @since 2.0.4
|
494
|
+
* @private
|
478
495
|
*/
|
479
496
|
static VALUE attr_set_ub1(VALUE self, VALUE attr_type, VALUE val)
|
480
497
|
{
|
481
|
-
oci8_base_t *base =
|
498
|
+
oci8_base_t *base = TO_HANDLE(self);
|
482
499
|
ub1 value;
|
483
500
|
|
484
501
|
/* validate arguments */
|
@@ -490,24 +507,23 @@ static VALUE attr_set_ub1(VALUE self, VALUE attr_type, VALUE val)
|
|
490
507
|
}
|
491
508
|
|
492
509
|
/*
|
493
|
-
*
|
494
|
-
* attr_set_ub2(attr_type, attr_value)
|
510
|
+
* @overload attr_set_ub2(attr_type, attr_value)
|
495
511
|
*
|
496
|
-
*
|
512
|
+
* Sets the value of an attribute as `ub2' datatype.
|
497
513
|
*
|
498
|
-
*
|
499
|
-
*
|
514
|
+
* @note If the specified attr_type's datatype is a
|
515
|
+
* pointer type, it causes a segmentation fault.
|
500
516
|
*
|
501
|
-
*
|
502
|
-
*
|
503
|
-
*
|
517
|
+
* @param [Fixnum] attr_type
|
518
|
+
* @param [Fixnum] attr_value
|
519
|
+
* @return [self]
|
504
520
|
*
|
505
|
-
*
|
506
|
-
*
|
521
|
+
* @since 2.0.4
|
522
|
+
* @private
|
507
523
|
*/
|
508
524
|
static VALUE attr_set_ub2(VALUE self, VALUE attr_type, VALUE val)
|
509
525
|
{
|
510
|
-
oci8_base_t *base =
|
526
|
+
oci8_base_t *base = TO_HANDLE(self);
|
511
527
|
ub2 value;
|
512
528
|
|
513
529
|
/* validate arguments */
|
@@ -519,24 +535,23 @@ static VALUE attr_set_ub2(VALUE self, VALUE attr_type, VALUE val)
|
|
519
535
|
}
|
520
536
|
|
521
537
|
/*
|
522
|
-
*
|
523
|
-
* attr_set_ub4(attr_type, attr_value)
|
538
|
+
* @overload attr_set_ub4(attr_type, attr_value)
|
524
539
|
*
|
525
|
-
*
|
540
|
+
* Sets the value of an attribute as `ub4' datatype.
|
526
541
|
*
|
527
|
-
*
|
528
|
-
*
|
542
|
+
* @note If the specified attr_type's datatype is a
|
543
|
+
* pointer type, it causes a segmentation fault.
|
529
544
|
*
|
530
|
-
*
|
531
|
-
*
|
532
|
-
*
|
545
|
+
* @param [Fixnum] attr_type
|
546
|
+
* @param [Integer] attr_value
|
547
|
+
* @return [self]
|
533
548
|
*
|
534
|
-
*
|
535
|
-
*
|
549
|
+
* @since 2.0.4
|
550
|
+
* @private
|
536
551
|
*/
|
537
552
|
static VALUE attr_set_ub4(VALUE self, VALUE attr_type, VALUE val)
|
538
553
|
{
|
539
|
-
oci8_base_t *base =
|
554
|
+
oci8_base_t *base = TO_HANDLE(self);
|
540
555
|
ub4 value;
|
541
556
|
|
542
557
|
/* validate arguments */
|
@@ -548,24 +563,23 @@ static VALUE attr_set_ub4(VALUE self, VALUE attr_type, VALUE val)
|
|
548
563
|
}
|
549
564
|
|
550
565
|
/*
|
551
|
-
*
|
552
|
-
* attr_set_ub8(attr_type, attr_value)
|
566
|
+
* @overload attr_set_ub8(attr_type, attr_value)
|
553
567
|
*
|
554
|
-
*
|
568
|
+
* Sets the value of an attribute as `ub8' datatype.
|
555
569
|
*
|
556
|
-
*
|
557
|
-
*
|
570
|
+
* @note If the specified attr_type's datatype is a
|
571
|
+
* pointer type, it causes a segmentation fault.
|
558
572
|
*
|
559
|
-
*
|
560
|
-
*
|
561
|
-
*
|
573
|
+
* @param [Fixnum] attr_type
|
574
|
+
* @param [Integer] attr_value
|
575
|
+
* @return [self]
|
562
576
|
*
|
563
|
-
*
|
564
|
-
*
|
577
|
+
* @since 2.0.4
|
578
|
+
* @private
|
565
579
|
*/
|
566
580
|
static VALUE attr_set_ub8(VALUE self, VALUE attr_type, VALUE val)
|
567
581
|
{
|
568
|
-
oci8_base_t *base =
|
582
|
+
oci8_base_t *base = TO_HANDLE(self);
|
569
583
|
ub8 value;
|
570
584
|
|
571
585
|
/* validate arguments */
|
@@ -577,24 +591,23 @@ static VALUE attr_set_ub8(VALUE self, VALUE attr_type, VALUE val)
|
|
577
591
|
}
|
578
592
|
|
579
593
|
/*
|
580
|
-
*
|
581
|
-
* attr_set_sb1(attr_type, attr_value)
|
594
|
+
* @overload attr_set_sb1(attr_type, attr_value)
|
582
595
|
*
|
583
|
-
*
|
596
|
+
* Sets the value of an attribute as `sb1' datatype.
|
584
597
|
*
|
585
|
-
*
|
586
|
-
*
|
598
|
+
* @note If the specified attr_type's datatype is a
|
599
|
+
* pointer type, it causes a segmentation fault.
|
587
600
|
*
|
588
|
-
*
|
589
|
-
*
|
590
|
-
*
|
601
|
+
* @param [Fixnum] attr_type
|
602
|
+
* @param [Fixnum] attr_value
|
603
|
+
* @return [self]
|
591
604
|
*
|
592
|
-
*
|
593
|
-
*
|
605
|
+
* @since 2.0.4
|
606
|
+
* @private
|
594
607
|
*/
|
595
608
|
static VALUE attr_set_sb1(VALUE self, VALUE attr_type, VALUE val)
|
596
609
|
{
|
597
|
-
oci8_base_t *base =
|
610
|
+
oci8_base_t *base = TO_HANDLE(self);
|
598
611
|
sb1 value;
|
599
612
|
|
600
613
|
/* validate arguments */
|
@@ -606,24 +619,23 @@ static VALUE attr_set_sb1(VALUE self, VALUE attr_type, VALUE val)
|
|
606
619
|
}
|
607
620
|
|
608
621
|
/*
|
609
|
-
*
|
610
|
-
* attr_set_sb2(attr_type, attr_value)
|
622
|
+
* @overload attr_set_sb2(attr_type, attr_value)
|
611
623
|
*
|
612
|
-
*
|
624
|
+
* Sets the value of an attribute as `sb2' datatype.
|
613
625
|
*
|
614
|
-
*
|
615
|
-
*
|
626
|
+
* @note If the specified attr_type's datatype is a
|
627
|
+
* pointer type, it causes a segmentation fault.
|
616
628
|
*
|
617
|
-
*
|
618
|
-
*
|
619
|
-
*
|
629
|
+
* @param [Fixnum] attr_type
|
630
|
+
* @param [Fixnum] attr_value
|
631
|
+
* @return [self]
|
620
632
|
*
|
621
|
-
*
|
622
|
-
*
|
633
|
+
* @since 2.0.4
|
634
|
+
* @private
|
623
635
|
*/
|
624
636
|
static VALUE attr_set_sb2(VALUE self, VALUE attr_type, VALUE val)
|
625
637
|
{
|
626
|
-
oci8_base_t *base =
|
638
|
+
oci8_base_t *base = TO_HANDLE(self);
|
627
639
|
sb2 value;
|
628
640
|
|
629
641
|
/* validate arguments */
|
@@ -635,24 +647,23 @@ static VALUE attr_set_sb2(VALUE self, VALUE attr_type, VALUE val)
|
|
635
647
|
}
|
636
648
|
|
637
649
|
/*
|
638
|
-
*
|
639
|
-
* attr_set_sb4(attr_type, attr_value)
|
650
|
+
* @overload attr_set_sb4(attr_type, attr_value)
|
640
651
|
*
|
641
|
-
*
|
652
|
+
* Sets the value of an attribute as `sb4' datatype.
|
642
653
|
*
|
643
|
-
*
|
644
|
-
*
|
654
|
+
* @note If the specified attr_type's datatype is a
|
655
|
+
* pointer type, it causes a segmentation fault.
|
645
656
|
*
|
646
|
-
*
|
647
|
-
*
|
648
|
-
*
|
657
|
+
* @param [Fixnum] attr_type
|
658
|
+
* @param [Integer] attr_value
|
659
|
+
* @return [self]
|
649
660
|
*
|
650
|
-
*
|
651
|
-
*
|
661
|
+
* @since 2.0.4
|
662
|
+
* @private
|
652
663
|
*/
|
653
664
|
static VALUE attr_set_sb4(VALUE self, VALUE attr_type, VALUE val)
|
654
665
|
{
|
655
|
-
oci8_base_t *base =
|
666
|
+
oci8_base_t *base = TO_HANDLE(self);
|
656
667
|
sb4 value;
|
657
668
|
|
658
669
|
/* validate arguments */
|
@@ -664,24 +675,23 @@ static VALUE attr_set_sb4(VALUE self, VALUE attr_type, VALUE val)
|
|
664
675
|
}
|
665
676
|
|
666
677
|
/*
|
667
|
-
*
|
668
|
-
* attr_set_sb8(attr_type, attr_value)
|
678
|
+
* @overload attr_set_sb8(attr_type, attr_value)
|
669
679
|
*
|
670
|
-
*
|
680
|
+
* Sets the value of an attribute as `sb8' datatype.
|
671
681
|
*
|
672
|
-
*
|
673
|
-
*
|
682
|
+
* @note If the specified attr_type's datatype is a
|
683
|
+
* pointer type, it causes a segmentation fault.
|
674
684
|
*
|
675
|
-
*
|
676
|
-
*
|
677
|
-
*
|
685
|
+
* @param [Fixnum] attr_type
|
686
|
+
* @param [Integer] attr_value
|
687
|
+
* @return [self]
|
678
688
|
*
|
679
|
-
*
|
680
|
-
*
|
689
|
+
* @since 2.0.4
|
690
|
+
* @private
|
681
691
|
*/
|
682
692
|
static VALUE attr_set_sb8(VALUE self, VALUE attr_type, VALUE val)
|
683
693
|
{
|
684
|
-
oci8_base_t *base =
|
694
|
+
oci8_base_t *base = TO_HANDLE(self);
|
685
695
|
sb8 value;
|
686
696
|
|
687
697
|
/* validate arguments */
|
@@ -693,24 +703,23 @@ static VALUE attr_set_sb8(VALUE self, VALUE attr_type, VALUE val)
|
|
693
703
|
}
|
694
704
|
|
695
705
|
/*
|
696
|
-
*
|
697
|
-
* attr_set_boolean(attr_type, attr_value)
|
706
|
+
* @overload attr_set_boolean(attr_type, attr_value)
|
698
707
|
*
|
699
|
-
*
|
708
|
+
* Sets the value of an attribute as `boolean' datatype.
|
700
709
|
*
|
701
|
-
*
|
702
|
-
*
|
710
|
+
* @note If the specified attr_type's datatype is a
|
711
|
+
* pointer type, it causes a segmentation fault.
|
703
712
|
*
|
704
|
-
*
|
705
|
-
*
|
706
|
-
*
|
713
|
+
* @param [Fixnum] attr_type
|
714
|
+
* @param [true or false] attr_value
|
715
|
+
* @return [self]
|
707
716
|
*
|
708
|
-
*
|
709
|
-
*
|
717
|
+
* @since 2.0.4
|
718
|
+
* @private
|
710
719
|
*/
|
711
720
|
static VALUE attr_set_boolean(VALUE self, VALUE attr_type, VALUE val)
|
712
721
|
{
|
713
|
-
oci8_base_t *base =
|
722
|
+
oci8_base_t *base = TO_HANDLE(self);
|
714
723
|
boolean value;
|
715
724
|
|
716
725
|
/* validate arguments */
|
@@ -722,23 +731,22 @@ static VALUE attr_set_boolean(VALUE self, VALUE attr_type, VALUE val)
|
|
722
731
|
}
|
723
732
|
|
724
733
|
/*
|
725
|
-
*
|
726
|
-
* attr_set_string(attr_type, attr_value)
|
734
|
+
* @overload attr_set_string(attr_type, attr_value)
|
727
735
|
*
|
728
|
-
*
|
729
|
-
*
|
730
|
-
*
|
736
|
+
* Sets the value of an attribute as `oratext *' datatype.
|
737
|
+
* +attr_value+ is converted to {OCI8.encoding} before it is set
|
738
|
+
* when the ruby version is 1.9.
|
731
739
|
*
|
732
|
-
*
|
733
|
-
*
|
734
|
-
*
|
740
|
+
* @param [Fixnum] attr_type
|
741
|
+
* @param [String] attr_value
|
742
|
+
* @return [self]
|
735
743
|
*
|
736
|
-
*
|
737
|
-
*
|
744
|
+
* @since 2.0.4
|
745
|
+
* @private
|
738
746
|
*/
|
739
747
|
static VALUE attr_set_string(VALUE self, VALUE attr_type, VALUE val)
|
740
748
|
{
|
741
|
-
oci8_base_t *base =
|
749
|
+
oci8_base_t *base = TO_HANDLE(self);
|
742
750
|
|
743
751
|
/* validate arguments */
|
744
752
|
Check_Type(attr_type, T_FIXNUM);
|
@@ -749,21 +757,20 @@ static VALUE attr_set_string(VALUE self, VALUE attr_type, VALUE val)
|
|
749
757
|
}
|
750
758
|
|
751
759
|
/*
|
752
|
-
*
|
753
|
-
* attr_set_binary(attr_type, attr_value)
|
760
|
+
* @overload attr_set_binary(attr_type, attr_value)
|
754
761
|
*
|
755
|
-
*
|
762
|
+
* Sets the value of an attribute as `ub1 *' datatype.
|
756
763
|
*
|
757
|
-
*
|
758
|
-
*
|
759
|
-
*
|
764
|
+
* @param [Fixnum] attr_type
|
765
|
+
* @param [String] attr_value
|
766
|
+
* @return [self]
|
760
767
|
*
|
761
|
-
*
|
762
|
-
*
|
768
|
+
* @since 2.0.4
|
769
|
+
* @private
|
763
770
|
*/
|
764
771
|
static VALUE attr_set_binary(VALUE self, VALUE attr_type, VALUE val)
|
765
772
|
{
|
766
|
-
oci8_base_t *base =
|
773
|
+
oci8_base_t *base = TO_HANDLE(self);
|
767
774
|
|
768
775
|
/* validate arguments */
|
769
776
|
Check_Type(attr_type, T_FIXNUM);
|
@@ -774,23 +781,22 @@ static VALUE attr_set_binary(VALUE self, VALUE attr_type, VALUE val)
|
|
774
781
|
}
|
775
782
|
|
776
783
|
/*
|
777
|
-
*
|
778
|
-
* attr_set_integer(attr_type, number)
|
784
|
+
* @overload attr_set_integer(attr_type, number)
|
779
785
|
*
|
780
|
-
*
|
781
|
-
*
|
782
|
-
*
|
786
|
+
* Sets the value of an attribute as `ub1 *' datatype.
|
787
|
+
* +number+ is converted to internal Oracle NUMBER format before
|
788
|
+
* it is set.
|
783
789
|
*
|
784
|
-
*
|
785
|
-
*
|
786
|
-
*
|
790
|
+
* @param [Fixnum] attr_type
|
791
|
+
* @param [Numeric] number
|
792
|
+
* @return [self]
|
787
793
|
*
|
788
|
-
*
|
789
|
-
*
|
794
|
+
* @since 2.0.4
|
795
|
+
* @private
|
790
796
|
*/
|
791
797
|
static VALUE attr_set_integer(VALUE self, VALUE attr_type, VALUE val)
|
792
798
|
{
|
793
|
-
oci8_base_t *base =
|
799
|
+
oci8_base_t *base = TO_HANDLE(self);
|
794
800
|
OCINumber value;
|
795
801
|
|
796
802
|
/* validate arguments */
|
@@ -803,8 +809,6 @@ static VALUE attr_set_integer(VALUE self, VALUE attr_type, VALUE val)
|
|
803
809
|
|
804
810
|
void Init_oci8_handle(void)
|
805
811
|
{
|
806
|
-
VALUE obj;
|
807
|
-
|
808
812
|
/*
|
809
813
|
* OCIHandle is the abstract base class of OCI handles and
|
810
814
|
* OCI descriptors; opaque data types of Oracle Call Interface.
|
@@ -816,8 +820,6 @@ void Init_oci8_handle(void)
|
|
816
820
|
rb_define_alloc_func(oci8_cOCIHandle, oci8_s_allocate);
|
817
821
|
rb_define_method_nodoc(oci8_cOCIHandle, "initialize", oci8_handle_initialize, 0);
|
818
822
|
rb_define_private_method(oci8_cOCIHandle, "free", oci8_handle_free, 0);
|
819
|
-
obj = Data_Wrap_Struct(rb_cObject, 0, 0, &oci8_base_vtable);
|
820
|
-
rb_ivar_set(oci8_cOCIHandle, oci8_id_oci8_vtable, obj);
|
821
823
|
|
822
824
|
/* methods to get attributes */
|
823
825
|
rb_define_private_method(oci8_cOCIHandle, "attr_get_ub1", attr_get_ub1, -1);
|