rubyfb 0.6.4 → 0.6.7
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 +14 -0
- data/Manifest +6 -7
- data/Rakefile +1 -1
- data/ext/Common.c +74 -0
- data/ext/Common.h +2 -0
- data/ext/Connection.c +0 -1
- data/ext/FireRuby.c +1 -4
- data/ext/Generator.c +0 -1
- data/ext/Statement.c +186 -26
- data/ext/Statement.h +1 -0
- data/ext/Transaction.c +0 -1
- data/ext/TypeMap.c +60 -285
- data/ext/TypeMap.h +2 -10
- data/lib/active_record/connection_adapters/rubyfb_adapter.rb +17 -16
- data/lib/{Connection.rb → connection.rb} +0 -0
- data/lib/{ProcedureCall.rb → procedure_call.rb} +0 -0
- data/lib/result_set.rb +109 -0
- data/lib/row.rb +149 -0
- data/lib/rubyfb.rb +7 -3
- data/lib/rubyfb_lib.so +0 -0
- data/lib/{SQLType.rb → sql_type.rb} +0 -0
- data/lib/statement.rb +17 -0
- data/rubyfb.gemspec +4 -4
- data/test/ResultSetTest.rb +7 -4
- data/test/RowTest.rb +4 -1
- data/test/TypeTest.rb +1 -1
- metadata +14 -12
- data/ext/ResultSet.c +0 -648
- data/ext/ResultSet.h +0 -59
- data/ext/Row.c +0 -678
- data/ext/Row.h +0 -38
data/ext/Statement.h
CHANGED
data/ext/Transaction.c
CHANGED
data/ext/TypeMap.c
CHANGED
@@ -28,10 +28,10 @@
|
|
28
28
|
#include <time.h>
|
29
29
|
#include <math.h>
|
30
30
|
#include <limits.h>
|
31
|
+
#include "Common.h"
|
31
32
|
#include "Blob.h"
|
32
33
|
#include "Connection.h"
|
33
34
|
#include "Transaction.h"
|
34
|
-
#include "ResultSet.h"
|
35
35
|
#include "Statement.h"
|
36
36
|
#include "FireRuby.h"
|
37
37
|
#include "rfbint.h"
|
@@ -42,7 +42,6 @@ VALUE createDate(const struct tm *);
|
|
42
42
|
VALUE createDateTime(VALUE dt);
|
43
43
|
VALUE createTime(VALUE dt);
|
44
44
|
VALUE createSafeTime(const struct tm*);
|
45
|
-
VALUE getConstant(const char *, VALUE);
|
46
45
|
VALUE toDateTime(VALUE);
|
47
46
|
VALUE rescueConvert(VALUE, VALUE);
|
48
47
|
void storeBlob(VALUE, XSQLVAR *, ConnectionHandle *, TransactionHandle *);
|
@@ -57,18 +56,24 @@ void populateDateField(VALUE, XSQLVAR *);
|
|
57
56
|
void populateTimeField(VALUE, XSQLVAR *);
|
58
57
|
void populateTimestampField(VALUE, XSQLVAR *);
|
59
58
|
|
60
|
-
ID
|
61
|
-
|
62
|
-
|
59
|
+
static ID
|
60
|
+
RB_INTERN_NEW,
|
61
|
+
RB_INTERN_TO_F,
|
62
|
+
RB_INTERN_ROUND,
|
63
|
+
RB_INTERN_ASTERISK,
|
64
|
+
RB_INTERN_CLASS,
|
65
|
+
RB_INTERN_NAME;
|
66
|
+
|
67
|
+
static VALUE cDate, cDateTime;
|
63
68
|
|
64
69
|
long long sql_scale(VALUE value, XSQLVAR *field) {
|
65
|
-
value = rb_funcall(value,
|
70
|
+
value = rb_funcall(value, RB_INTERN_TO_F, 0);
|
66
71
|
if(field->sqlscale) {
|
67
72
|
// this requires special care - decimal point shift can cause type overflow
|
68
73
|
// the easyest way is to use ruby arithmetics (although it's not the fastes)
|
69
|
-
value = rb_funcall(value,
|
74
|
+
value = rb_funcall(value, RB_INTERN_ASTERISK, 1, LONG2NUM((long)pow(10, abs(field->sqlscale))));
|
70
75
|
}
|
71
|
-
return NUM2LL(rb_funcall(value,
|
76
|
+
return NUM2LL(rb_funcall(value, RB_INTERN_ROUND, 0));
|
72
77
|
}
|
73
78
|
|
74
79
|
VALUE sql_unscale(VALUE value, XSQLVAR *field) {
|
@@ -76,7 +81,7 @@ VALUE sql_unscale(VALUE value, XSQLVAR *field) {
|
|
76
81
|
return value;
|
77
82
|
}
|
78
83
|
return rb_float_new(
|
79
|
-
NUM2DBL(rb_funcall(value,
|
84
|
+
NUM2DBL(rb_funcall(value, RB_INTERN_TO_F, 0)) / pow(10, abs(field->sqlscale))
|
80
85
|
);
|
81
86
|
}
|
82
87
|
|
@@ -92,11 +97,10 @@ VALUE sql_unscale(VALUE value, XSQLVAR *field) {
|
|
92
97
|
* the field type referenced.
|
93
98
|
*
|
94
99
|
*/
|
95
|
-
VALUE
|
96
|
-
VALUE metadata,
|
100
|
+
VALUE toValue(XSQLVAR *entry,
|
97
101
|
VALUE connection,
|
98
102
|
VALUE transaction) {
|
99
|
-
VALUE
|
103
|
+
VALUE value = Qnil;
|
100
104
|
|
101
105
|
/* Check for NULL values. */
|
102
106
|
if(!((entry->sqltype & 1) && (*entry->sqlind < 0))) {
|
@@ -108,8 +112,7 @@ VALUE toColumn(XSQLVAR *entry,
|
|
108
112
|
short length;
|
109
113
|
double actual;
|
110
114
|
BlobHandle *blob = NULL;
|
111
|
-
VALUE
|
112
|
-
working = Qnil;
|
115
|
+
VALUE working = Qnil;
|
113
116
|
|
114
117
|
switch(type) {
|
115
118
|
case SQL_BLOB: /* Type: BLOB */
|
@@ -129,7 +132,7 @@ VALUE toColumn(XSQLVAR *entry,
|
|
129
132
|
datetime.tm_sec = 0;
|
130
133
|
datetime.tm_min = 0;
|
131
134
|
datetime.tm_hour = 0;
|
132
|
-
if(
|
135
|
+
if(getFireRubySetting("DATE_AS_DATE") == Qtrue) {
|
133
136
|
value = createDate(&datetime);
|
134
137
|
} else {
|
135
138
|
value = createSafeTime(&datetime);
|
@@ -180,41 +183,7 @@ VALUE toColumn(XSQLVAR *entry,
|
|
180
183
|
} /* End of switch. */
|
181
184
|
}
|
182
185
|
|
183
|
-
|
184
|
-
rb_ivar_set(column, AT_COLUMN_ID, metadata);
|
185
|
-
rb_ivar_set(column, AT_VALUE_ID, value);
|
186
|
-
return(column);
|
187
|
-
}
|
188
|
-
|
189
|
-
|
190
|
-
/**
|
191
|
-
* This function attempts to convert the data contents of a XSQLDA to a Ruby
|
192
|
-
* array of values.
|
193
|
-
*
|
194
|
-
* @param results A reference to the ResultSet object to extract the data row
|
195
|
-
* from.
|
196
|
-
*
|
197
|
-
* @return A reference to the array containing the row data from the XSQLDA.
|
198
|
-
*
|
199
|
-
*/
|
200
|
-
VALUE toRowColumns(VALUE results) {
|
201
|
-
VALUE array, transaction, connection, columns;
|
202
|
-
XSQLVAR *entry = NULL;
|
203
|
-
StatementHandle *hStatement = NULL;
|
204
|
-
int i;
|
205
|
-
|
206
|
-
Data_Get_Struct(rb_funcall(results, STATEMENT_ID, 0), StatementHandle, hStatement);
|
207
|
-
transaction = rb_funcall(results, TRANSACTION_ID, 0);
|
208
|
-
connection = rb_funcall(results, CONNECTION_ID, 0);
|
209
|
-
array = rb_ary_new2(hStatement->output->sqln);
|
210
|
-
|
211
|
-
entry = hStatement->output->sqlvar;
|
212
|
-
columns = getResultsColumns(results);
|
213
|
-
for(i = 0; i < hStatement->output->sqln; i++, entry++) {
|
214
|
-
rb_ary_store(array, i, toColumn(entry, rb_ary_entry(columns, i), connection, transaction));
|
215
|
-
}
|
216
|
-
|
217
|
-
return(array);
|
186
|
+
return(value);
|
218
187
|
}
|
219
188
|
|
220
189
|
|
@@ -255,10 +224,10 @@ void setParameters(XSQLDA *parameters, VALUE array, VALUE transaction, VALUE con
|
|
255
224
|
|
256
225
|
/* Check for nils to indicate null values. */
|
257
226
|
if(value != Qnil) {
|
258
|
-
VALUE name = rb_funcall(value,
|
227
|
+
VALUE name = rb_funcall(value, RB_INTERN_CLASS, 0);
|
259
228
|
|
260
229
|
*parameter->sqlind = 0;
|
261
|
-
name = rb_funcall(name,
|
230
|
+
name = rb_funcall(name, RB_INTERN_NAME, 0);
|
262
231
|
switch(type) {
|
263
232
|
case SQL_ARRAY: /* Type: ARRAY */
|
264
233
|
/* TO BE DONE! */
|
@@ -331,32 +300,7 @@ void setParameters(XSQLDA *parameters, VALUE array, VALUE transaction, VALUE con
|
|
331
300
|
*
|
332
301
|
*/
|
333
302
|
VALUE createDate(const struct tm *date) {
|
334
|
-
|
335
|
-
klass = Qnil;
|
336
|
-
|
337
|
-
klass = getClass("Date");
|
338
|
-
|
339
|
-
/* Check if we need to require date. */
|
340
|
-
if(klass == Qnil) {
|
341
|
-
rb_require("date");
|
342
|
-
klass = getClass("Date");
|
343
|
-
}
|
344
|
-
|
345
|
-
/* Check that we got the Date class. */
|
346
|
-
if(klass != Qnil) {
|
347
|
-
VALUE arguments[3];
|
348
|
-
|
349
|
-
/* Prepare the arguments. */
|
350
|
-
arguments[0] = INT2FIX(date->tm_year + 1900);
|
351
|
-
arguments[1] = INT2FIX(date->tm_mon + 1);
|
352
|
-
arguments[2] = INT2FIX(date->tm_mday);
|
353
|
-
|
354
|
-
/* Create the class instance. */
|
355
|
-
result = rb_funcall2(klass, NEW_ID, 3, arguments);
|
356
|
-
}
|
357
|
-
|
358
|
-
|
359
|
-
return(result);
|
303
|
+
return rb_funcall(cDate, RB_INTERN_NEW, 3, INT2FIX(date->tm_year + 1900), INT2FIX(date->tm_mon + 1), INT2FIX(date->tm_mday));
|
360
304
|
}
|
361
305
|
|
362
306
|
|
@@ -369,38 +313,18 @@ VALUE createDate(const struct tm *date) {
|
|
369
313
|
*
|
370
314
|
*/
|
371
315
|
VALUE createDateTime(VALUE dt) {
|
372
|
-
VALUE result = Qnil,
|
373
|
-
klass = Qnil;
|
374
|
-
|
375
316
|
struct tm *datetime;
|
376
317
|
Data_Get_Struct(dt, struct tm, datetime);
|
377
318
|
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
if(klass != Qnil) {
|
388
|
-
VALUE arguments[7];
|
389
|
-
|
390
|
-
/* Prepare the arguments. */
|
391
|
-
arguments[0] = INT2FIX(datetime->tm_year + 1900);
|
392
|
-
arguments[1] = INT2FIX(datetime->tm_mon + 1);
|
393
|
-
arguments[2] = INT2FIX(datetime->tm_mday);
|
394
|
-
arguments[3] = INT2FIX(datetime->tm_hour);
|
395
|
-
arguments[4] = INT2FIX(datetime->tm_min);
|
396
|
-
arguments[5] = INT2FIX(datetime->tm_sec);
|
397
|
-
arguments[6] = rb_funcall(rb_funcall(klass, rb_intern("now"), 0), rb_intern("offset"), 0);
|
398
|
-
|
399
|
-
/* Create the class instance. */
|
400
|
-
result = rb_funcall2(klass, NEW_ID, 7, arguments);
|
401
|
-
}
|
402
|
-
|
403
|
-
return(result);
|
319
|
+
return rb_funcall(cDateTime, RB_INTERN_NEW, 7,
|
320
|
+
INT2FIX(datetime->tm_year + 1900),
|
321
|
+
INT2FIX(datetime->tm_mon + 1),
|
322
|
+
INT2FIX(datetime->tm_mday),
|
323
|
+
INT2FIX(datetime->tm_hour),
|
324
|
+
INT2FIX(datetime->tm_min),
|
325
|
+
INT2FIX(datetime->tm_sec),
|
326
|
+
rb_funcall(rb_funcall(cDateTime, rb_intern("now"), 0), rb_intern("offset"), 0)
|
327
|
+
);
|
404
328
|
}
|
405
329
|
|
406
330
|
|
@@ -413,34 +337,22 @@ VALUE createDateTime(VALUE dt) {
|
|
413
337
|
*
|
414
338
|
*/
|
415
339
|
VALUE createTime(VALUE dt) {
|
416
|
-
VALUE result = Qnil,
|
417
|
-
klass = Qnil;
|
418
|
-
|
419
340
|
struct tm *datetime;
|
420
341
|
Data_Get_Struct(dt, struct tm, datetime);
|
421
342
|
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
arguments[3] = INT2FIX(datetime->tm_hour);
|
436
|
-
arguments[4] = INT2FIX(datetime->tm_min);
|
437
|
-
arguments[5] = INT2FIX(datetime->tm_sec);
|
438
|
-
|
439
|
-
/* Create the class instance. */
|
440
|
-
result = rb_funcall2(klass, rb_intern("local"), 6, arguments);
|
441
|
-
}
|
442
|
-
|
443
|
-
return(result);
|
343
|
+
/*fprintf(stderr, "%d-%d-%d %d:%d:%d\n", datetime->tm_year + 1900,
|
344
|
+
datetime->tm_mon + 1, datetime->tm_mday, datetime->tm_hour,
|
345
|
+
datetime->tm_min, datetime->tm_sec);*/
|
346
|
+
|
347
|
+
/* Create the class instance. */
|
348
|
+
return rb_funcall(rb_cTime, rb_intern("local"), 6,
|
349
|
+
INT2FIX(datetime->tm_year + 1900),
|
350
|
+
INT2FIX(datetime->tm_mon + 1),
|
351
|
+
INT2FIX(datetime->tm_mday),
|
352
|
+
INT2FIX(datetime->tm_hour),
|
353
|
+
INT2FIX(datetime->tm_min),
|
354
|
+
INT2FIX(datetime->tm_sec)
|
355
|
+
);
|
444
356
|
}
|
445
357
|
|
446
358
|
/**
|
@@ -459,138 +371,6 @@ VALUE createSafeTime(const struct tm *datetime) {
|
|
459
371
|
return rb_rescue(createTime, dt, createDateTime, dt);
|
460
372
|
}
|
461
373
|
|
462
|
-
/**
|
463
|
-
* This method fetches a Ruby constant definition. If the module specified to
|
464
|
-
* the function is nil then the top level is assume
|
465
|
-
*
|
466
|
-
* @param name The name of the constant to be retrieved.
|
467
|
-
* @param module A reference to the Ruby module that should contain the
|
468
|
-
* constant.
|
469
|
-
*
|
470
|
-
* @return A Ruby VALUE representing the constant.
|
471
|
-
*
|
472
|
-
*/
|
473
|
-
VALUE getConstant(const char *name, VALUE module) {
|
474
|
-
VALUE owner = module,
|
475
|
-
constants,
|
476
|
-
exists,
|
477
|
-
entry = Qnil,
|
478
|
-
symbol = ID2SYM(rb_intern(name));
|
479
|
-
|
480
|
-
/* Check that we've got somewhere to look. */
|
481
|
-
if(owner == Qnil) {
|
482
|
-
owner = rb_cModule;
|
483
|
-
}
|
484
|
-
|
485
|
-
constants = rb_funcall(owner, rb_intern("constants"), 0),
|
486
|
-
exists = rb_funcall(constants, rb_intern("include?"), 1, symbol);
|
487
|
-
if(exists == Qfalse) {
|
488
|
-
/* 1.8 style lookup */
|
489
|
-
exists = rb_funcall(constants, rb_intern("include?"), 1, rb_str_new2(name));
|
490
|
-
}
|
491
|
-
if(exists != Qfalse) {
|
492
|
-
entry = rb_funcall(owner, rb_intern("const_get"), 1, symbol);
|
493
|
-
}
|
494
|
-
return(entry);
|
495
|
-
}
|
496
|
-
|
497
|
-
|
498
|
-
/**
|
499
|
-
* This method fetches a Ruby module definition object based on a class name.
|
500
|
-
* The method is assumed to have been defined at the top level.
|
501
|
-
*
|
502
|
-
* @return A Ruby VALUE representing the Module requested, or nil if the
|
503
|
-
* module could not be located.
|
504
|
-
*
|
505
|
-
*/
|
506
|
-
VALUE getModule(const char *name) {
|
507
|
-
VALUE module = getConstant(name, Qnil);
|
508
|
-
|
509
|
-
if(module != Qnil) {
|
510
|
-
VALUE type = rb_funcall(module, CLASS_ID, 0);
|
511
|
-
|
512
|
-
if(type != rb_cModule) {
|
513
|
-
module = Qnil;
|
514
|
-
}
|
515
|
-
}
|
516
|
-
|
517
|
-
return(module);
|
518
|
-
}
|
519
|
-
|
520
|
-
|
521
|
-
/**
|
522
|
-
* This method fetches a Ruby class definition object based on a class name.
|
523
|
-
* The class is assumed to have been defined at the top level.
|
524
|
-
*
|
525
|
-
* @return A Ruby VALUE representing the requested class, or nil if the class
|
526
|
-
* could not be found.
|
527
|
-
*
|
528
|
-
*/
|
529
|
-
VALUE getClass(const char *name) {
|
530
|
-
VALUE klass = getConstant(name, Qnil);
|
531
|
-
|
532
|
-
if(klass != Qnil) {
|
533
|
-
VALUE type = rb_funcall(klass, CLASS_ID, 0);
|
534
|
-
|
535
|
-
if(type != rb_cClass) {
|
536
|
-
klass = Qnil;
|
537
|
-
}
|
538
|
-
}
|
539
|
-
|
540
|
-
return(klass);
|
541
|
-
}
|
542
|
-
|
543
|
-
|
544
|
-
/**
|
545
|
-
* This method fetches a module from a specified module.
|
546
|
-
*
|
547
|
-
* @param name The name of the class to fetch.
|
548
|
-
* @param owner The module to search for the module in.
|
549
|
-
*
|
550
|
-
* @return A Ruby VALUE representing the requested module, or nil if it could
|
551
|
-
* not be located.
|
552
|
-
*
|
553
|
-
*/
|
554
|
-
VALUE getModuleInModule(const char *name, VALUE owner) {
|
555
|
-
VALUE module = getConstant(name, owner);
|
556
|
-
|
557
|
-
if(module != Qnil) {
|
558
|
-
VALUE type = rb_funcall(module, CLASS_ID, 0);
|
559
|
-
|
560
|
-
if(type != rb_cModule) {
|
561
|
-
module = Qnil;
|
562
|
-
}
|
563
|
-
}
|
564
|
-
|
565
|
-
return(module);
|
566
|
-
}
|
567
|
-
|
568
|
-
|
569
|
-
/**
|
570
|
-
* This function fetches a class from a specified module.
|
571
|
-
*
|
572
|
-
* @param name The name of the class to be retrieved.
|
573
|
-
* @param owner The module to search for the class in.
|
574
|
-
*
|
575
|
-
* @return A Ruby VALUE representing the requested module, or nil if it could
|
576
|
-
* not be located.
|
577
|
-
*
|
578
|
-
*/
|
579
|
-
VALUE getClassInModule(const char *name, VALUE owner) {
|
580
|
-
VALUE klass = getConstant(name, owner);
|
581
|
-
|
582
|
-
if(klass != Qnil) {
|
583
|
-
VALUE type = rb_funcall(klass, CLASS_ID, 0);
|
584
|
-
|
585
|
-
if(type != rb_cClass) {
|
586
|
-
klass = Qnil;
|
587
|
-
}
|
588
|
-
}
|
589
|
-
|
590
|
-
return(klass);
|
591
|
-
}
|
592
|
-
|
593
|
-
|
594
374
|
/**
|
595
375
|
* This function attempts to convert a VALUE to a series of date/time values.
|
596
376
|
*
|
@@ -602,13 +382,12 @@ VALUE getClassInModule(const char *name, VALUE owner) {
|
|
602
382
|
*/
|
603
383
|
VALUE toDateTime(VALUE value) {
|
604
384
|
VALUE result,
|
605
|
-
klass = rb_funcall(value,
|
606
|
-
date_time_class = getClass("DateTime");
|
385
|
+
klass = rb_funcall(value, RB_INTERN_CLASS, 0);
|
607
386
|
|
608
|
-
if((klass == rb_cTime) || (klass ==
|
387
|
+
if((klass == rb_cTime) || (klass == cDateTime)) {
|
609
388
|
VALUE data;
|
610
389
|
|
611
|
-
if (klass ==
|
390
|
+
if (klass == cDateTime) {
|
612
391
|
value = rb_funcall(value, rb_intern("to_time"), 0);
|
613
392
|
}
|
614
393
|
result = rb_ary_new();
|
@@ -621,7 +400,7 @@ VALUE toDateTime(VALUE value) {
|
|
621
400
|
rb_ary_push(result, rb_funcall(value, rb_intern("hour"), 0));
|
622
401
|
rb_ary_push(result, rb_funcall(value, rb_intern("min"), 0));
|
623
402
|
rb_ary_push(result, rb_funcall(value, rb_intern("sec"), 0));
|
624
|
-
} else if(klass ==
|
403
|
+
} else if(klass == cDate) {
|
625
404
|
VALUE data;
|
626
405
|
|
627
406
|
result = rb_ary_new();
|
@@ -798,7 +577,7 @@ void populateDoubleField(VALUE value, XSQLVAR *field) {
|
|
798
577
|
|
799
578
|
if(TYPE(value) != T_FLOAT) {
|
800
579
|
if(rb_obj_is_kind_of(value, rb_cNumeric) || TYPE(value) == T_STRING) {
|
801
|
-
actual = rb_funcall(value,
|
580
|
+
actual = rb_funcall(value, RB_INTERN_TO_F, 0);
|
802
581
|
} else {
|
803
582
|
rb_fireruby_raise(NULL,
|
804
583
|
"Error converting input parameter to double.");
|
@@ -825,7 +604,7 @@ void populateFloatField(VALUE value, XSQLVAR *field) {
|
|
825
604
|
|
826
605
|
if(TYPE(value) != T_FLOAT) {
|
827
606
|
if(rb_obj_is_kind_of(value, rb_cNumeric) || TYPE(value) == T_STRING) {
|
828
|
-
actual = rb_funcall(value,
|
607
|
+
actual = rb_funcall(value, RB_INTERN_TO_F, 0);
|
829
608
|
} else {
|
830
609
|
rb_fireruby_raise(NULL,
|
831
610
|
"Error converting input parameter to double.");
|
@@ -939,7 +718,6 @@ void populateTimeField(VALUE value, XSQLVAR *field) {
|
|
939
718
|
field->sqltype = SQL_TYPE_TIME;
|
940
719
|
}
|
941
720
|
|
942
|
-
|
943
721
|
/**
|
944
722
|
* This method populates a date output field.
|
945
723
|
*
|
@@ -967,17 +745,14 @@ void populateTimestampField(VALUE value, XSQLVAR *field) {
|
|
967
745
|
field->sqltype = SQL_TIMESTAMP;
|
968
746
|
}
|
969
747
|
|
970
|
-
void Init_TypeMap() {
|
971
|
-
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
|
979
|
-
|
980
|
-
AT_VALUE_ID = rb_intern("@value");
|
981
|
-
AT_TYPE_ID = rb_intern("@type");
|
982
|
-
AT_COLUMN_ID = rb_intern("@column");
|
748
|
+
void Init_TypeMap(VALUE module) {
|
749
|
+
RB_INTERN_NEW = rb_intern("new");
|
750
|
+
RB_INTERN_TO_F = rb_intern("to_f");
|
751
|
+
RB_INTERN_ROUND = rb_intern("round");
|
752
|
+
RB_INTERN_ASTERISK = rb_intern("*");
|
753
|
+
RB_INTERN_CLASS = rb_intern("class");
|
754
|
+
RB_INTERN_NAME = rb_intern("name");
|
755
|
+
|
756
|
+
cDate = getClass("Date");
|
757
|
+
cDateTime = getClass("DateTime");
|
983
758
|
}
|