ruby-oci8 1.0.7 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +1254 -390
- data/Makefile +10 -13
- data/README +56 -385
- data/VERSION +1 -1
- data/dist-files +26 -27
- data/ext/oci8/.document +1 -0
- data/ext/oci8/MANIFEST +0 -4
- data/ext/oci8/apiwrap.c.tmpl +172 -0
- data/ext/oci8/apiwrap.h.tmpl +61 -0
- data/ext/oci8/apiwrap.rb +91 -0
- data/ext/oci8/apiwrap.yml +1243 -0
- data/ext/oci8/attr.c +124 -384
- data/ext/oci8/bind.c +472 -164
- data/ext/oci8/encoding.c +196 -0
- data/ext/oci8/env.c +84 -253
- data/ext/oci8/error.c +196 -127
- data/ext/oci8/extconf.rb +82 -59
- data/ext/oci8/lob.c +710 -370
- data/ext/oci8/metadata.c +359 -0
- data/ext/oci8/object.c +622 -0
- data/ext/oci8/oci8.c +577 -161
- data/ext/oci8/oci8.h +354 -258
- data/ext/oci8/oci8lib.c +493 -0
- data/ext/oci8/ocidatetime.c +473 -0
- data/ext/oci8/ocinumber.c +1123 -24
- data/ext/oci8/oraconf.rb +72 -106
- data/ext/oci8/oradate.c +511 -321
- data/ext/oci8/stmt.c +752 -572
- data/ext/oci8/win32.c +131 -0
- data/ext/oci8/xmldb.c +383 -0
- data/lib/.document +2 -0
- data/lib/dbd/OCI8.rb +2 -17
- data/lib/oci8.rb.in +41 -1622
- data/lib/oci8/.document +5 -0
- data/lib/oci8/compat.rb +108 -0
- data/lib/oci8/datetime.rb +489 -0
- data/lib/oci8/encoding-init.rb +40 -0
- data/lib/oci8/encoding.yml +537 -0
- data/lib/oci8/metadata.rb +2077 -0
- data/lib/oci8/object.rb +548 -0
- data/lib/oci8/oci8.rb +773 -0
- data/lib/oci8/oracle_version.rb +144 -0
- data/metaconfig +3 -3
- data/ruby-oci8.gemspec +5 -5
- data/setup.rb +4 -4
- data/test/config.rb +64 -84
- data/test/test_all.rb +14 -21
- data/test/test_array_dml.rb +317 -0
- data/test/test_bind_raw.rb +18 -25
- data/test/test_bind_time.rb +78 -91
- data/test/test_break.rb +37 -35
- data/test/test_clob.rb +33 -89
- data/test/test_connstr.rb +5 -4
- data/test/test_datetime.rb +469 -0
- data/test/test_dbi.rb +99 -60
- data/test/test_dbi_clob.rb +3 -8
- data/test/test_metadata.rb +65 -51
- data/test/test_oci8.rb +151 -55
- data/test/test_oracle_version.rb +70 -0
- data/test/test_oradate.rb +76 -83
- data/test/test_oranumber.rb +405 -71
- data/test/test_rowid.rb +6 -11
- metadata +31 -32
- data/NEWS +0 -420
- data/ext/oci8/const.c +0 -165
- data/ext/oci8/define.c +0 -53
- data/ext/oci8/describe.c +0 -81
- data/ext/oci8/descriptor.c +0 -39
- data/ext/oci8/handle.c +0 -273
- data/ext/oci8/oranumber.c +0 -445
- data/ext/oci8/param.c +0 -37
- data/ext/oci8/server.c +0 -182
- data/ext/oci8/session.c +0 -99
- data/ext/oci8/svcctx.c +0 -238
- data/ruby-oci8.spec +0 -62
- data/support/README +0 -4
- data/support/runit/assert.rb +0 -281
- data/support/runit/cui/testrunner.rb +0 -101
- data/support/runit/error.rb +0 -4
- data/support/runit/method_mappable.rb +0 -20
- data/support/runit/robserver.rb +0 -25
- data/support/runit/setuppable.rb +0 -15
- data/support/runit/teardownable.rb +0 -16
- data/support/runit/testcase.rb +0 -113
- data/support/runit/testfailure.rb +0 -25
- data/support/runit/testresult.rb +0 -121
- data/support/runit/testsuite.rb +0 -43
- data/support/runit/version.rb +0 -3
- data/test/test_describe.rb +0 -137
data/ext/oci8/oranumber.c
DELETED
@@ -1,445 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
oranumber.c - part of ruby-oci8
|
3
|
-
|
4
|
-
Copyright (C) 2002 KUBO Takehiro <kubo@jiubao.org>
|
5
|
-
|
6
|
-
=begin
|
7
|
-
== OraNumber
|
8
|
-
This is not a numeric class, so algebra operations and setter methods
|
9
|
-
are not permitted, but a place to hold fetched date from Oracle server.
|
10
|
-
|
11
|
-
In fact as matter, this is a test class to check the algorithm to
|
12
|
-
convert Oracle internal number format to Ruby's number, which is internally used by,
|
13
|
-
for example, ((<OCIStmt#attrGet|OCIHandle#attrGet>))(((<OCI_ATTR_MIN>))).
|
14
|
-
=end
|
15
|
-
*/
|
16
|
-
#include "oci8.h"
|
17
|
-
#include "math.h"
|
18
|
-
|
19
|
-
#define Get_Sign(on) ((on)->exponent & 0x80)
|
20
|
-
#define Get_Exp_Part(on) ((on)->exponent & 0x7F)
|
21
|
-
#define Get_Exponent(on) (Get_Sign(on) ? (Get_Exp_Part(on) - 65) : (~(Get_Exp_Part(on)) + 63))
|
22
|
-
#define Get_Mantissa_At(on, i) (Get_Sign(on) ? (on)->mantissa[i] - 1 : 101 - (on)->mantissa[i])
|
23
|
-
|
24
|
-
static int ora_number_from_str(ora_vnumber_t *ovn, unsigned char *buf, size_t len);
|
25
|
-
|
26
|
-
static ora_vnumber_t *get_ora_number(VALUE self)
|
27
|
-
{
|
28
|
-
ora_vnumber_t *ovn;
|
29
|
-
Data_Get_Struct(self, ora_vnumber_t, ovn);
|
30
|
-
return ovn;
|
31
|
-
}
|
32
|
-
|
33
|
-
static VALUE ora_number_s_allocate(VALUE klass)
|
34
|
-
{
|
35
|
-
ora_vnumber_t *ovn;
|
36
|
-
return Data_Make_Struct(klass, ora_vnumber_t, NULL, xfree, ovn);
|
37
|
-
}
|
38
|
-
|
39
|
-
#ifndef HAVE_RB_DEFINE_ALLOC_FUNC
|
40
|
-
/* ruby 1.6 */
|
41
|
-
static VALUE ora_number_s_new(int argc, VALUE *argv, VALUE klass)
|
42
|
-
{
|
43
|
-
VALUE obj = ora_number_s_allocate(klass);
|
44
|
-
rb_obj_call_init(obj, argc, argv);
|
45
|
-
return obj;
|
46
|
-
}
|
47
|
-
#endif
|
48
|
-
|
49
|
-
/*
|
50
|
-
=begin
|
51
|
-
--- OraNumber.new()
|
52
|
-
=end
|
53
|
-
*/
|
54
|
-
static VALUE ora_number_initialize(int argc, VALUE *argv, VALUE self)
|
55
|
-
{
|
56
|
-
ora_vnumber_t *ovn = get_ora_number(self);
|
57
|
-
volatile VALUE arg;
|
58
|
-
|
59
|
-
rb_scan_args(argc, argv, "01", &arg);
|
60
|
-
ovn->size = 1;
|
61
|
-
ovn->num.exponent = 0x80;
|
62
|
-
memset(ovn->num.mantissa, 0, sizeof(ovn->num.mantissa));
|
63
|
-
if (argc == 1) {
|
64
|
-
if (TYPE(arg) != T_STRING) {
|
65
|
-
arg = rb_obj_as_string(arg);
|
66
|
-
}
|
67
|
-
if (ora_number_from_str(ovn, RSTRING_ORATEXT(arg), RSTRING_LEN(arg)) != 0) {
|
68
|
-
rb_raise(rb_eArgError, "could not convert '%s' to OraNumber", RSTRING_PTR(arg));
|
69
|
-
}
|
70
|
-
}
|
71
|
-
return Qnil;
|
72
|
-
}
|
73
|
-
|
74
|
-
static VALUE ora_number_initialize_copy(VALUE lhs, VALUE rhs)
|
75
|
-
{
|
76
|
-
ora_vnumber_t *l, *r;
|
77
|
-
|
78
|
-
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
|
79
|
-
/* ruby 1.8 */
|
80
|
-
rb_obj_init_copy(lhs, rhs);
|
81
|
-
#endif
|
82
|
-
Data_Get_Struct(lhs, ora_vnumber_t, l);
|
83
|
-
Data_Get_Struct(rhs, ora_vnumber_t, r);
|
84
|
-
memcpy(l, r, sizeof(ora_vnumber_t));
|
85
|
-
return lhs;
|
86
|
-
}
|
87
|
-
|
88
|
-
static VALUE ora_number_clone(VALUE self)
|
89
|
-
{
|
90
|
-
VALUE obj = ora_number_s_allocate(CLASS_OF(self));
|
91
|
-
return ora_number_initialize_copy(obj, self);
|
92
|
-
}
|
93
|
-
|
94
|
-
/*
|
95
|
-
=begin
|
96
|
-
--- OraNumber#to_i()
|
97
|
-
=end
|
98
|
-
*/
|
99
|
-
static VALUE ora_number_to_i(VALUE self)
|
100
|
-
{
|
101
|
-
ora_vnumber_t *ovn = get_ora_number(self);
|
102
|
-
unsigned char buf[ORA_NUMBER_BUF_SIZE];
|
103
|
-
|
104
|
-
ora_number_to_str(buf, NULL, &(ovn->num), ovn->size);
|
105
|
-
return rb_cstr2inum(TO_CHARPTR(buf), 10);
|
106
|
-
}
|
107
|
-
|
108
|
-
/*
|
109
|
-
=begin
|
110
|
-
--- OraNumber#to_f()
|
111
|
-
=end
|
112
|
-
*/
|
113
|
-
static VALUE ora_number_to_f(VALUE self)
|
114
|
-
{
|
115
|
-
ora_vnumber_t *ovn = get_ora_number(self);
|
116
|
-
unsigned char buf[ORA_NUMBER_BUF_SIZE];
|
117
|
-
|
118
|
-
ora_number_to_str(buf, NULL, &(ovn->num), ovn->size);
|
119
|
-
return rb_float_new(rb_cstr_to_dbl(TO_CHARPTR(buf), Qfalse));
|
120
|
-
}
|
121
|
-
|
122
|
-
/*
|
123
|
-
=begin
|
124
|
-
--- OraNumber#to_s()
|
125
|
-
=end
|
126
|
-
*/
|
127
|
-
static VALUE ora_number_to_s(VALUE self)
|
128
|
-
{
|
129
|
-
ora_vnumber_t *ovn = get_ora_number(self);
|
130
|
-
unsigned char buf[ORA_NUMBER_BUF_SIZE];
|
131
|
-
size_t len;
|
132
|
-
|
133
|
-
ora_number_to_str(buf, &len, &(ovn->num), ovn->size);
|
134
|
-
return rb_str_new(TO_CHARPTR(buf), len);
|
135
|
-
}
|
136
|
-
|
137
|
-
static VALUE ora_number_uminus(VALUE self)
|
138
|
-
{
|
139
|
-
ora_vnumber_t *ovn = get_ora_number(self);
|
140
|
-
VALUE obj;
|
141
|
-
int i;
|
142
|
-
|
143
|
-
if (ovn->num.exponent == 0x80)
|
144
|
-
return self;
|
145
|
-
obj = ora_number_clone(self);
|
146
|
-
ovn = get_ora_number(obj);
|
147
|
-
ovn->num.exponent = ~(ovn->num.exponent);
|
148
|
-
for (i = 0;i < ovn->size - 1;i++)
|
149
|
-
ovn->num.mantissa[i] = 102 - ovn->num.mantissa[i];
|
150
|
-
if (Get_Sign(&(ovn->num))) {
|
151
|
-
if (ovn->size != 21 || ovn->num.mantissa[19] == 0x00) {
|
152
|
-
ovn->size--;
|
153
|
-
}
|
154
|
-
} else {
|
155
|
-
if (ovn->size != 21) {
|
156
|
-
ovn->num.mantissa[ovn->size - 1] = 102;
|
157
|
-
ovn->size++;
|
158
|
-
}
|
159
|
-
}
|
160
|
-
return obj;
|
161
|
-
}
|
162
|
-
|
163
|
-
static VALUE ora_number_dump(int argc, VALUE *argv, VALUE self)
|
164
|
-
{
|
165
|
-
ora_vnumber_t *ovn = get_ora_number(self);
|
166
|
-
unsigned char i;
|
167
|
-
for (i = ovn->size - 1; i < 20; i++) {
|
168
|
-
ovn->num.mantissa[i] = 0;
|
169
|
-
}
|
170
|
-
return rb_str_new((const char*)ovn, sizeof(ora_vnumber_t));
|
171
|
-
}
|
172
|
-
|
173
|
-
static VALUE ora_number_s_load(VALUE klass, VALUE str)
|
174
|
-
{
|
175
|
-
ora_vnumber_t *ovn;
|
176
|
-
VALUE obj;
|
177
|
-
|
178
|
-
Check_Type(str, T_STRING);
|
179
|
-
if (RSTRING_LEN(str) != sizeof(ora_vnumber_t)) {
|
180
|
-
rb_raise(rb_eTypeError, "marshaled OraNumber format differ");
|
181
|
-
}
|
182
|
-
obj = ora_number_s_allocate(klass);
|
183
|
-
ovn = get_ora_number(obj);
|
184
|
-
memcpy(ovn, RSTRING_PTR(str), sizeof(ora_vnumber_t));
|
185
|
-
return obj;
|
186
|
-
}
|
187
|
-
|
188
|
-
void Init_ora_number(void)
|
189
|
-
{
|
190
|
-
#ifdef HAVE_RB_DEFINE_ALLOC_FUNC
|
191
|
-
/* ruby 1.8 */
|
192
|
-
rb_define_alloc_func(cOraNumber, RUBY_METHOD_FUNC(ora_number_s_allocate));
|
193
|
-
rb_define_method(cOraNumber, "initialize", ora_number_initialize, -1);
|
194
|
-
rb_define_method(cOraNumber, "initialize_copy", ora_number_initialize_copy, 1);
|
195
|
-
#else
|
196
|
-
/* ruby 1.6 */
|
197
|
-
rb_define_singleton_method(cOraNumber, "new", ora_number_s_new, -1);
|
198
|
-
rb_define_method(cOraNumber, "initialize", ora_number_initialize, -1);
|
199
|
-
rb_define_method(cOraNumber, "clone", ora_number_clone, 0);
|
200
|
-
rb_define_method(cOraNumber, "dup", ora_number_clone, 0);
|
201
|
-
#endif
|
202
|
-
|
203
|
-
rb_define_method(cOraNumber, "to_i", ora_number_to_i, 0);
|
204
|
-
rb_define_method(cOraNumber, "to_f", ora_number_to_f, 0);
|
205
|
-
rb_define_method(cOraNumber, "to_s", ora_number_to_s, 0);
|
206
|
-
rb_define_method(cOraNumber, "-@", ora_number_uminus, 0);
|
207
|
-
|
208
|
-
rb_define_method(cOraNumber, "_dump", ora_number_dump, -1);
|
209
|
-
rb_define_singleton_method(cOraNumber, "_load", ora_number_s_load, 1);
|
210
|
-
}
|
211
|
-
|
212
|
-
void ora_number_to_str(unsigned char *buf, size_t *lenp, ora_number_t *on, unsigned char size)
|
213
|
-
{
|
214
|
-
int exponent;
|
215
|
-
int len = 0;
|
216
|
-
int mentissa_size;
|
217
|
-
int i, j;
|
218
|
-
|
219
|
-
if (on->exponent == 0x80) {
|
220
|
-
buf[0] = '0';
|
221
|
-
buf[1] = '\0';
|
222
|
-
if (lenp != NULL)
|
223
|
-
*lenp = 1;
|
224
|
-
return;
|
225
|
-
}
|
226
|
-
|
227
|
-
if (Get_Sign(on)) {
|
228
|
-
mentissa_size = size - 1;
|
229
|
-
} else {
|
230
|
-
if (size == 21 && on->mantissa[19] != 102)
|
231
|
-
mentissa_size = 20;
|
232
|
-
else
|
233
|
-
mentissa_size = size - 2;
|
234
|
-
buf[len++] = '-';
|
235
|
-
}
|
236
|
-
exponent = Get_Exponent(on);
|
237
|
-
if (exponent < 0) {
|
238
|
-
buf[len++] = '0';
|
239
|
-
buf[len++] = '.';
|
240
|
-
for (i = exponent * 2;i < -2;i++)
|
241
|
-
buf[len++] = '0';
|
242
|
-
for (i = 0;i < mentissa_size;i++) {
|
243
|
-
j = Get_Mantissa_At(on, i);
|
244
|
-
buf[len++] = j / 10 + '0';
|
245
|
-
if (i != mentissa_size - 1 || j % 10 != 0)
|
246
|
-
buf[len++] = j % 10 + '0';
|
247
|
-
}
|
248
|
-
} else {
|
249
|
-
for (i = 0;i < mentissa_size;i++) {
|
250
|
-
j = Get_Mantissa_At(on, i);
|
251
|
-
if (i == exponent + 1) {
|
252
|
-
buf[len++] = '.';
|
253
|
-
}
|
254
|
-
if (i != 0 || j / 10 != 0)
|
255
|
-
buf[len++] = j / 10 + '0';
|
256
|
-
if ((i < exponent + 1) /* integer part */
|
257
|
-
|| (i != mentissa_size - 1 || j % 10 != 0) /* decimal fraction */)
|
258
|
-
buf[len++] = j % 10 + '0';
|
259
|
-
}
|
260
|
-
for (;i <= exponent;i++) {
|
261
|
-
buf[len++] = '0';
|
262
|
-
buf[len++] = '0';
|
263
|
-
}
|
264
|
-
}
|
265
|
-
buf[len] = '\0';
|
266
|
-
if (lenp != NULL)
|
267
|
-
*lenp = len;
|
268
|
-
}
|
269
|
-
|
270
|
-
static int ora_number_from_str(ora_vnumber_t *ovn, unsigned char *buf, size_t len)
|
271
|
-
{
|
272
|
-
unsigned char work[80];
|
273
|
-
int sign = 1;
|
274
|
-
int state = 0;
|
275
|
-
int i, j;
|
276
|
-
int iidx; /* index of integer part */
|
277
|
-
int fidx; /* index of fraction part */
|
278
|
-
unsigned char *p;
|
279
|
-
int mantissa_size;
|
280
|
-
int exponent;
|
281
|
-
|
282
|
-
if (len > ORA_NUMBER_BUF_SIZE) {
|
283
|
-
return 1;
|
284
|
-
}
|
285
|
-
/* [ \t]*(+|-)[0-9]*(.[0-9]*) */
|
286
|
-
for (i = iidx = fidx = 0; i < len; i++) {
|
287
|
-
unsigned char uc = buf[i];
|
288
|
-
switch (state) {
|
289
|
-
case 0:
|
290
|
-
/* [ \t]*(+|-)[0-9]*(.[0-9]*) */
|
291
|
-
/* ^ */
|
292
|
-
switch (uc) {
|
293
|
-
case ' ':
|
294
|
-
case '\t':
|
295
|
-
/* [ \t]*(+|-)[0-9]*(.[0-9]*) */
|
296
|
-
/* ^ */
|
297
|
-
break;
|
298
|
-
case '-':
|
299
|
-
sign = -1;
|
300
|
-
state = 1;
|
301
|
-
/* [ \t]*(+|-)[0-9]*(.[0-9]*) */
|
302
|
-
/* ^ */
|
303
|
-
break;
|
304
|
-
case '+':
|
305
|
-
case '0':
|
306
|
-
state = 1;
|
307
|
-
/* [ \t]*(+|-)[0-9]*(.[0-9]*) */
|
308
|
-
/* ^ */
|
309
|
-
break;
|
310
|
-
case '1':
|
311
|
-
case '2':
|
312
|
-
case '3':
|
313
|
-
case '4':
|
314
|
-
case '5':
|
315
|
-
case '6':
|
316
|
-
case '7':
|
317
|
-
case '8':
|
318
|
-
case '9':
|
319
|
-
work[iidx++] = uc - '0';
|
320
|
-
state = 1;
|
321
|
-
/* [ \t]*(+|-)[0-9]*(.[0-9]*) */
|
322
|
-
/* ^ */
|
323
|
-
break;
|
324
|
-
case '.':
|
325
|
-
state = 2;
|
326
|
-
/* [ \t]*(+|-)[0-9]*(.[0-9]*) */
|
327
|
-
/* ^ */
|
328
|
-
break;
|
329
|
-
default:
|
330
|
-
return 1;
|
331
|
-
}
|
332
|
-
break;
|
333
|
-
case 1:
|
334
|
-
/* [ \t]*(+|-)[0-9]*(.[0-9]*) */
|
335
|
-
/* ^ */
|
336
|
-
switch (uc) {
|
337
|
-
case '0':
|
338
|
-
case '1':
|
339
|
-
case '2':
|
340
|
-
case '3':
|
341
|
-
case '4':
|
342
|
-
case '5':
|
343
|
-
case '6':
|
344
|
-
case '7':
|
345
|
-
case '8':
|
346
|
-
case '9':
|
347
|
-
if (iidx > sizeof(work))
|
348
|
-
return 1;
|
349
|
-
work[iidx++] = uc - '0';
|
350
|
-
/* [ \t]*(+|-)[0-9]*(.[0-9]*) */
|
351
|
-
/* ^ */
|
352
|
-
break;
|
353
|
-
case '.':
|
354
|
-
state = 2;
|
355
|
-
/* [ \t]*(+|-)[0-9]*(.[0-9]*) */
|
356
|
-
/* ^ */
|
357
|
-
break;
|
358
|
-
default:
|
359
|
-
return 1;
|
360
|
-
}
|
361
|
-
break;
|
362
|
-
case 2:
|
363
|
-
/* [ \t]*(+|-)[0-9]*(.[0-9]*) */
|
364
|
-
/* ^ */
|
365
|
-
switch (uc) {
|
366
|
-
case '0':
|
367
|
-
case '1':
|
368
|
-
case '2':
|
369
|
-
case '3':
|
370
|
-
case '4':
|
371
|
-
case '5':
|
372
|
-
case '6':
|
373
|
-
case '7':
|
374
|
-
case '8':
|
375
|
-
case '9':
|
376
|
-
if (iidx + fidx > sizeof(work))
|
377
|
-
return 1;
|
378
|
-
work[iidx + fidx++] = uc - '0';
|
379
|
-
/* [ \t]*(+|-)[0-9]*(.[0-9]*) */
|
380
|
-
/* ^ */
|
381
|
-
break;
|
382
|
-
default:
|
383
|
-
return 1;
|
384
|
-
}
|
385
|
-
break;
|
386
|
-
}
|
387
|
-
}
|
388
|
-
/* convert to 100-base number */
|
389
|
-
if (iidx & 1) {
|
390
|
-
i = j = 1;
|
391
|
-
} else {
|
392
|
-
i = j = 0;
|
393
|
-
}
|
394
|
-
if (fidx & 1) {
|
395
|
-
if (iidx + fidx > sizeof(work))
|
396
|
-
return 1;
|
397
|
-
work[iidx + fidx++] = 0;
|
398
|
-
}
|
399
|
-
while (i < iidx + fidx) {
|
400
|
-
work[j++] = work[i] * 10 + work[i + 1];
|
401
|
-
i += 2;
|
402
|
-
}
|
403
|
-
iidx = (iidx + 1) >> 1;
|
404
|
-
fidx >>= 1;
|
405
|
-
/* ... */
|
406
|
-
p = work;
|
407
|
-
mantissa_size = iidx + fidx;
|
408
|
-
exponent = (int)iidx - 1;
|
409
|
-
/* delete leading zeros */
|
410
|
-
while (mantissa_size > 0 && p[0] == 0) {
|
411
|
-
mantissa_size--;
|
412
|
-
exponent--;
|
413
|
-
p++;
|
414
|
-
}
|
415
|
-
/* delete trailing zeros */
|
416
|
-
while (mantissa_size > 0 && p[mantissa_size - 1] == 0) {
|
417
|
-
mantissa_size--;
|
418
|
-
}
|
419
|
-
/* check size */
|
420
|
-
if (mantissa_size > sizeof(ovn->num.mantissa))
|
421
|
-
return 1;
|
422
|
-
if (mantissa_size == 0) {
|
423
|
-
ovn->size = 1;
|
424
|
-
ovn->num.exponent = 0x80;
|
425
|
-
return 0;
|
426
|
-
}
|
427
|
-
if (sign > 0) {
|
428
|
-
ovn->size = mantissa_size + 1;
|
429
|
-
ovn->num.exponent = 0x80 + exponent + 65;
|
430
|
-
for (i = 0; i < mantissa_size; i++) {
|
431
|
-
ovn->num.mantissa[i] = p[i] + 1;
|
432
|
-
}
|
433
|
-
} else {
|
434
|
-
ovn->size = mantissa_size + 1;
|
435
|
-
ovn->num.exponent = 62 - exponent;
|
436
|
-
for (i = 0; i < mantissa_size; i++) {
|
437
|
-
ovn->num.mantissa[i] = 101 - p[i];
|
438
|
-
}
|
439
|
-
if (mantissa_size < 20) {
|
440
|
-
ovn->size++;
|
441
|
-
ovn->num.mantissa[i] = 102;
|
442
|
-
}
|
443
|
-
}
|
444
|
-
return 0;
|
445
|
-
}
|
data/ext/oci8/param.c
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
param.c - part of ruby-oci8
|
3
|
-
|
4
|
-
Copyright (C) 2002 KUBO Takehiro <kubo@jiubao.org>
|
5
|
-
|
6
|
-
=begin
|
7
|
-
== OCIParam
|
8
|
-
super class: ((<OCIDescriptor>))
|
9
|
-
=end
|
10
|
-
*/
|
11
|
-
#include "oci8.h"
|
12
|
-
|
13
|
-
void Init_oci8_param(void)
|
14
|
-
{
|
15
|
-
rb_define_method(cOCIParam, "paramGet", oci8_param_get, 1);
|
16
|
-
}
|
17
|
-
|
18
|
-
VALUE oci8_param_get(VALUE self, VALUE pos)
|
19
|
-
{
|
20
|
-
oci8_handle_t *h;
|
21
|
-
OCIParam *parmhp = NULL;
|
22
|
-
oci8_handle_t *parmh;
|
23
|
-
VALUE obj;
|
24
|
-
sword rv;
|
25
|
-
|
26
|
-
Get_Handle(self, h);
|
27
|
-
Check_Type(pos, T_FIXNUM);
|
28
|
-
rv = OCIParamGet(h->hp, h->type, h->errhp, (dvoid *)&parmhp, FIX2INT(pos));
|
29
|
-
if (rv != OCI_SUCCESS) {
|
30
|
-
oci8_raise(h->errhp, rv, NULL);
|
31
|
-
}
|
32
|
-
parmh = oci8_make_handle(OCI_DTYPE_PARAM, parmhp, h->errhp, h, 0);
|
33
|
-
parmh->u.param.is_implicit = (h->type == OCI_HTYPE_STMT) ? 1 : 0;
|
34
|
-
|
35
|
-
obj = parmh->self;
|
36
|
-
return obj;
|
37
|
-
}
|