rroonga 3.0.5-x86-mingw32 → 3.0.6-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +5 -0
- data/Gemfile +20 -0
- data/Rakefile +187 -0
- data/doc/text/news.textile +7 -0
- data/doc/text/tutorial.textile +0 -2
- data/ext/groonga/extconf.rb +7 -1
- data/ext/groonga/rb-grn-accessor.c +11 -11
- data/ext/groonga/rb-grn-array.c +25 -25
- data/ext/groonga/rb-grn-column.c +106 -106
- data/ext/groonga/rb-grn-context.c +121 -121
- data/ext/groonga/rb-grn-database.c +78 -78
- data/ext/groonga/rb-grn-double-array-trie.c +92 -92
- data/ext/groonga/rb-grn-encoding-support.c +1 -1
- data/ext/groonga/rb-grn-encoding.c +28 -28
- data/ext/groonga/rb-grn-exception.c +9 -9
- data/ext/groonga/rb-grn-expression-builder.c +6 -6
- data/ext/groonga/rb-grn-expression.c +87 -87
- data/ext/groonga/rb-grn-fix-size-column.c +12 -12
- data/ext/groonga/rb-grn-geo-point.c +2 -2
- data/ext/groonga/rb-grn-hash.c +38 -38
- data/ext/groonga/rb-grn-index-column.c +191 -191
- data/ext/groonga/rb-grn-index-cursor.c +29 -29
- data/ext/groonga/rb-grn-logger.c +36 -36
- data/ext/groonga/rb-grn-normalizer.c +10 -10
- data/ext/groonga/rb-grn-patricia-trie.c +196 -196
- data/ext/groonga/rb-grn-plugin.c +5 -5
- data/ext/groonga/rb-grn-posting.c +2 -2
- data/ext/groonga/rb-grn-procedure.c +2 -2
- data/ext/groonga/rb-grn-query-logger.c +1 -1
- data/ext/groonga/rb-grn-record.c +1 -1
- data/ext/groonga/rb-grn-snippet.c +14 -14
- data/ext/groonga/rb-grn-table-cursor-key-support.c +4 -4
- data/ext/groonga/rb-grn-table-cursor.c +52 -52
- data/ext/groonga/rb-grn-table-key-support.c +209 -209
- data/ext/groonga/rb-grn-type.c +18 -18
- data/ext/groonga/rb-grn-utils.c +332 -314
- data/ext/groonga/rb-grn-variable-size-column.c +34 -34
- data/ext/groonga/rb-grn-variable.c +2 -2
- data/ext/groonga/rb-grn.h +240 -232
- data/ext/groonga/rb-groonga.c +10 -10
- data/lib/1.9/groonga.so +0 -0
- data/lib/2.0/groonga.so +0 -0
- data/rroonga-build.rb +7 -0
- data/rroonga.gemspec +1 -1
- data/test/test-hash.rb +4 -4
- data/test/test-index-column.rb +271 -257
- data/test/test-table-key-support.rb +78 -0
- data/test/test-table.rb +78 -51
- metadata +8 -3
data/ext/groonga/rb-grn-type.c
CHANGED
@@ -35,7 +35,7 @@ grn_obj *
|
|
35
35
|
rb_grn_type_from_ruby_object (VALUE object)
|
36
36
|
{
|
37
37
|
if (!RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cGrnType))) {
|
38
|
-
|
38
|
+
rb_raise(rb_eTypeError, "not a groonga type");
|
39
39
|
}
|
40
40
|
|
41
41
|
return RVAL2GRNOBJECT(object, NULL);
|
@@ -43,7 +43,7 @@ rb_grn_type_from_ruby_object (VALUE object)
|
|
43
43
|
|
44
44
|
VALUE
|
45
45
|
rb_grn_type_to_ruby_object (grn_ctx *context, grn_obj *type,
|
46
|
-
|
46
|
+
grn_bool owner)
|
47
47
|
{
|
48
48
|
return GRNOBJECT2RVAL(rb_cGrnType, context, type, owner);
|
49
49
|
}
|
@@ -82,10 +82,10 @@ rb_grn_type_initialize (int argc, VALUE *argv, VALUE self)
|
|
82
82
|
rb_scan_args(argc, argv, "11", &rb_name, &options);
|
83
83
|
|
84
84
|
rb_grn_scan_options(options,
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
85
|
+
"context", &rb_context,
|
86
|
+
"type", &rb_type,
|
87
|
+
"size", &rb_size,
|
88
|
+
NULL);
|
89
89
|
|
90
90
|
name = StringValuePtr(rb_name);
|
91
91
|
name_size = RSTRING_LEN(rb_name);
|
@@ -93,25 +93,25 @@ rb_grn_type_initialize (int argc, VALUE *argv, VALUE self)
|
|
93
93
|
context = rb_grn_context_ensure(&rb_context);
|
94
94
|
|
95
95
|
if (NIL_P(rb_type) ||
|
96
|
-
|
96
|
+
rb_grn_equal_option(rb_type, "variable")) {
|
97
97
|
flags = GRN_OBJ_KEY_VAR_SIZE;
|
98
98
|
} else if (rb_grn_equal_option(rb_type, "integer") ||
|
99
99
|
rb_grn_equal_option(rb_type, "int")) {
|
100
|
-
|
100
|
+
flags = GRN_OBJ_KEY_INT;
|
101
101
|
size = sizeof(int);
|
102
102
|
} else if (rb_grn_equal_option(rb_type, "unsigned_integer") ||
|
103
|
-
|
104
|
-
|
103
|
+
rb_grn_equal_option(rb_type, "uint")) {
|
104
|
+
flags = GRN_OBJ_KEY_UINT;
|
105
105
|
size = sizeof(unsigned int);
|
106
106
|
} else if (rb_grn_equal_option(rb_type, "float")) {
|
107
|
-
|
107
|
+
flags = GRN_OBJ_KEY_FLOAT;
|
108
108
|
size = sizeof(double);
|
109
109
|
} else {
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
110
|
+
rb_raise(rb_eArgError,
|
111
|
+
":type should be one of "
|
112
|
+
"[:integer, :int, :unsigned_integer, :uint, "
|
113
|
+
":float, :variable]: %s",
|
114
|
+
rb_grn_inspect(options));
|
115
115
|
}
|
116
116
|
|
117
117
|
if (NIL_P(rb_size)) {
|
@@ -227,10 +227,10 @@ rb_grn_init_type (VALUE mGrn)
|
|
227
227
|
rb_define_method(rb_cGrnType, "flags", rb_grn_type_flags, 0);
|
228
228
|
rb_define_method(rb_cGrnType, "fixed_size?", rb_grn_type_fixed_size_p, 0);
|
229
229
|
rb_define_method(rb_cGrnType, "variable_size?",
|
230
|
-
|
230
|
+
rb_grn_type_variable_size_p, 0);
|
231
231
|
|
232
232
|
rb_define_method(rb_cGrnType, "unsigned_integer?",
|
233
|
-
|
233
|
+
rb_grn_type_unsigned_integer_p, 0);
|
234
234
|
rb_define_alias(rb_cGrnType, "uint?", "unsigned_integer?");
|
235
235
|
|
236
236
|
rb_define_method(rb_cGrnType, "integer?", rb_grn_type_integer_p, 0);
|
data/ext/groonga/rb-grn-utils.c
CHANGED
@@ -33,62 +33,62 @@ rb_grn_inspect (VALUE object)
|
|
33
33
|
const char *
|
34
34
|
rb_grn_inspect_type (unsigned char type)
|
35
35
|
{
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
36
|
+
switch (type) {
|
37
|
+
case GRN_VOID:
|
38
|
+
return "void";
|
39
|
+
case GRN_BULK:
|
40
|
+
return "bulk";
|
41
|
+
case GRN_PTR:
|
42
|
+
return "ptr";
|
43
|
+
case GRN_UVECTOR:
|
44
|
+
return "uvector";
|
45
|
+
case GRN_PVECTOR:
|
46
|
+
return "pvector";
|
47
|
+
case GRN_MSG:
|
48
|
+
return "msg";
|
49
|
+
case GRN_QUERY:
|
50
|
+
return "query";
|
51
|
+
case GRN_ACCESSOR:
|
52
|
+
return "accessor";
|
53
|
+
case GRN_SNIP:
|
54
|
+
return "snip";
|
55
|
+
case GRN_PATSNIP:
|
56
|
+
return "patsnip";
|
57
|
+
case GRN_CURSOR_TABLE_HASH_KEY:
|
58
|
+
return "cursor-table-hash-key";
|
59
|
+
case GRN_CURSOR_TABLE_PAT_KEY:
|
60
|
+
return "cursor-table-pat-key";
|
61
|
+
case GRN_CURSOR_TABLE_DAT_KEY:
|
62
|
+
return "cursor-table-dat-key";
|
63
|
+
case GRN_CURSOR_TABLE_NO_KEY:
|
64
|
+
return "cursor-table-no-key";
|
65
|
+
case GRN_CURSOR_COLUMN_INDEX:
|
66
|
+
return "cursor-column-index";
|
67
|
+
case GRN_TYPE:
|
68
|
+
return "type";
|
69
|
+
case GRN_PROC:
|
70
|
+
return "proc";
|
71
|
+
case GRN_EXPR:
|
72
|
+
return "expr";
|
73
|
+
case GRN_TABLE_HASH_KEY:
|
74
|
+
return "table-hash-key";
|
75
|
+
case GRN_TABLE_PAT_KEY:
|
76
|
+
return "table-pat-key";
|
77
|
+
case GRN_TABLE_DAT_KEY:
|
78
|
+
return "table-dat-key";
|
79
|
+
case GRN_TABLE_NO_KEY:
|
80
|
+
return "table-no-key";
|
81
|
+
case GRN_DB:
|
82
|
+
return "db";
|
83
|
+
case GRN_COLUMN_FIX_SIZE:
|
84
|
+
return "column-fix-size";
|
85
|
+
case GRN_COLUMN_VAR_SIZE:
|
86
|
+
return "column-var-size";
|
87
|
+
case GRN_COLUMN_INDEX:
|
88
|
+
return "column-index";
|
89
|
+
default:
|
90
|
+
return "unknown";
|
91
|
+
}
|
92
92
|
}
|
93
93
|
|
94
94
|
void
|
@@ -199,73 +199,70 @@ rb_grn_bulk_to_ruby_object_by_range_id (grn_ctx *context, grn_obj *bulk,
|
|
199
199
|
grn_bool success = GRN_TRUE;
|
200
200
|
|
201
201
|
switch (range_id) {
|
202
|
-
|
202
|
+
case GRN_DB_VOID:
|
203
203
|
*rb_value = rb_str_new(GRN_TEXT_VALUE(bulk), GRN_TEXT_LEN(bulk));
|
204
204
|
break;
|
205
|
-
|
205
|
+
case GRN_DB_BOOL:
|
206
206
|
*rb_value = GRN_BOOL_VALUE(bulk) ? Qtrue : Qfalse;
|
207
207
|
break;
|
208
|
-
|
208
|
+
case GRN_DB_INT8:
|
209
209
|
*rb_value = INT2NUM(GRN_INT8_VALUE(bulk));
|
210
210
|
break;
|
211
|
-
|
211
|
+
case GRN_DB_UINT8:
|
212
212
|
*rb_value = UINT2NUM(GRN_UINT8_VALUE(bulk));
|
213
213
|
break;
|
214
|
-
|
214
|
+
case GRN_DB_INT16:
|
215
215
|
*rb_value = INT2NUM(GRN_INT16_VALUE(bulk));
|
216
216
|
break;
|
217
|
-
|
217
|
+
case GRN_DB_UINT16:
|
218
218
|
*rb_value = UINT2NUM(GRN_UINT16_VALUE(bulk));
|
219
219
|
break;
|
220
|
-
|
220
|
+
case GRN_DB_INT32:
|
221
221
|
*rb_value = INT2NUM(GRN_INT32_VALUE(bulk));
|
222
222
|
break;
|
223
|
-
|
223
|
+
case GRN_DB_UINT32:
|
224
224
|
*rb_value = UINT2NUM(GRN_UINT32_VALUE(bulk));
|
225
225
|
break;
|
226
|
-
|
226
|
+
case GRN_DB_INT64:
|
227
227
|
*rb_value = LL2NUM(GRN_INT64_VALUE(bulk));
|
228
228
|
break;
|
229
|
-
|
229
|
+
case GRN_DB_UINT64:
|
230
230
|
*rb_value = ULL2NUM(GRN_UINT64_VALUE(bulk));
|
231
231
|
break;
|
232
|
-
|
232
|
+
case GRN_DB_FLOAT:
|
233
233
|
*rb_value = rb_float_new(GRN_FLOAT_VALUE(bulk));
|
234
234
|
break;
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
LL2NUM(sec), LL2NUM(usec));
|
243
|
-
}
|
235
|
+
case GRN_DB_TIME: {
|
236
|
+
int64_t time_value, sec, usec;
|
237
|
+
|
238
|
+
time_value = GRN_TIME_VALUE(bulk);
|
239
|
+
GRN_TIME_UNPACK(time_value, sec, usec);
|
240
|
+
*rb_value = rb_funcall(rb_cTime, rb_intern("at"), 2,
|
241
|
+
LL2NUM(sec), LL2NUM(usec));
|
244
242
|
break;
|
245
|
-
|
246
|
-
|
247
|
-
|
243
|
+
}
|
244
|
+
case GRN_DB_SHORT_TEXT:
|
245
|
+
case GRN_DB_TEXT:
|
246
|
+
case GRN_DB_LONG_TEXT:
|
248
247
|
*rb_value = rb_grn_context_rb_string_new(context,
|
249
248
|
GRN_TEXT_VALUE(bulk),
|
250
249
|
GRN_TEXT_LEN(bulk));
|
251
250
|
break;
|
252
|
-
|
253
|
-
|
254
|
-
int latitude, longitude;
|
251
|
+
case GRN_DB_TOKYO_GEO_POINT: {
|
252
|
+
int latitude, longitude;
|
255
253
|
|
256
|
-
|
257
|
-
|
258
|
-
}
|
254
|
+
GRN_GEO_POINT_VALUE(bulk, latitude, longitude);
|
255
|
+
*rb_value = rb_grn_tokyo_geo_point_new(latitude, longitude);
|
259
256
|
break;
|
260
|
-
|
261
|
-
|
262
|
-
|
257
|
+
}
|
258
|
+
case GRN_DB_WGS84_GEO_POINT: {
|
259
|
+
int latitude, longitude;
|
263
260
|
|
264
|
-
|
265
|
-
|
266
|
-
}
|
261
|
+
GRN_GEO_POINT_VALUE(bulk, latitude, longitude);
|
262
|
+
*rb_value = rb_grn_wgs84_geo_point_new(latitude, longitude);
|
267
263
|
break;
|
268
|
-
|
264
|
+
}
|
265
|
+
default:
|
269
266
|
success = GRN_FALSE;
|
270
267
|
break;
|
271
268
|
}
|
@@ -288,47 +285,46 @@ rb_grn_bulk_to_ruby_object_by_range_type (grn_ctx *context, grn_obj *bulk,
|
|
288
285
|
return GRN_FALSE;
|
289
286
|
|
290
287
|
switch (range->header.type) {
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
grn_id id;
|
297
|
-
|
298
|
-
id = *((grn_id *)GRN_BULK_HEAD(bulk));
|
299
|
-
if (id == GRN_ID_NIL) {
|
300
|
-
*rb_value = Qnil;
|
301
|
-
} else {
|
302
|
-
VALUE rb_range;
|
288
|
+
case GRN_TABLE_HASH_KEY:
|
289
|
+
case GRN_TABLE_PAT_KEY:
|
290
|
+
case GRN_TABLE_DAT_KEY:
|
291
|
+
case GRN_TABLE_NO_KEY: {
|
292
|
+
grn_id id;
|
303
293
|
|
304
|
-
|
305
|
-
|
306
|
-
|
294
|
+
id = *((grn_id *)GRN_BULK_HEAD(bulk));
|
295
|
+
if (id == GRN_ID_NIL) {
|
296
|
+
*rb_value = Qnil;
|
297
|
+
} else {
|
298
|
+
VALUE rb_range;
|
299
|
+
|
300
|
+
rb_range = GRNOBJECT2RVAL(Qnil, context, range, GRN_FALSE);
|
301
|
+
*rb_value = rb_grn_record_new(rb_range, id, Qnil);
|
307
302
|
}
|
308
303
|
break;
|
309
|
-
|
304
|
+
}
|
305
|
+
case GRN_TYPE:
|
310
306
|
if (range->header.flags & GRN_OBJ_KEY_VAR_SIZE) {
|
311
307
|
*rb_value = rb_grn_context_rb_string_new(context,
|
312
308
|
GRN_BULK_HEAD(bulk),
|
313
309
|
GRN_BULK_VSIZE(bulk));
|
314
310
|
} else {
|
315
311
|
switch (range->header.flags & GRN_OBJ_KEY_MASK) {
|
316
|
-
|
312
|
+
case GRN_OBJ_KEY_UINT:
|
317
313
|
*rb_value = INT2NUM(GRN_UINT32_VALUE(bulk));
|
318
314
|
break;
|
319
|
-
|
315
|
+
case GRN_OBJ_KEY_INT:
|
320
316
|
*rb_value = INT2NUM(GRN_INT32_VALUE(bulk));
|
321
317
|
break;
|
322
|
-
|
318
|
+
case GRN_OBJ_KEY_FLOAT:
|
323
319
|
*rb_value = rb_float_new(GRN_FLOAT_VALUE(bulk));
|
324
320
|
break;
|
325
|
-
|
321
|
+
default:
|
326
322
|
success = GRN_FALSE;
|
327
323
|
}
|
328
324
|
break;
|
329
325
|
}
|
330
326
|
break;
|
331
|
-
|
327
|
+
default:
|
332
328
|
success = GRN_FALSE;
|
333
329
|
break;
|
334
330
|
}
|
@@ -375,42 +371,41 @@ rb_grn_bulk_from_ruby_object (VALUE object, grn_ctx *context, grn_obj *bulk)
|
|
375
371
|
}
|
376
372
|
|
377
373
|
switch (TYPE(object)) {
|
378
|
-
|
374
|
+
case T_NIL:
|
379
375
|
grn_obj_reinit(context, bulk, GRN_DB_VOID, 0);
|
380
376
|
break;
|
381
|
-
|
377
|
+
case T_SYMBOL:
|
382
378
|
object = rb_funcall(object, rb_intern("to_s"), 0);
|
383
|
-
|
379
|
+
case T_STRING:
|
384
380
|
grn_obj_reinit(context, bulk, GRN_DB_TEXT, 0);
|
385
381
|
rb_grn_context_text_set(context, bulk, object);
|
386
382
|
break;
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
GRN_INT64_SET(context, bulk, int64_value);
|
398
|
-
}
|
383
|
+
case T_FIXNUM:
|
384
|
+
case T_BIGNUM: {
|
385
|
+
int64_t int64_value;
|
386
|
+
int64_value = NUM2LL(object);
|
387
|
+
if (int64_value <= INT32_MAX) {
|
388
|
+
grn_obj_reinit(context, bulk, GRN_DB_INT32, 0);
|
389
|
+
GRN_INT32_SET(context, bulk, int64_value);
|
390
|
+
} else {
|
391
|
+
grn_obj_reinit(context, bulk, GRN_DB_INT64, 0);
|
392
|
+
GRN_INT64_SET(context, bulk, int64_value);
|
399
393
|
}
|
400
394
|
break;
|
401
|
-
|
395
|
+
}
|
396
|
+
case T_FLOAT:
|
402
397
|
grn_obj_reinit(context, bulk, GRN_DB_FLOAT, 0);
|
403
398
|
GRN_FLOAT_SET(context, bulk, NUM2DBL(object));
|
404
399
|
break;
|
405
|
-
|
400
|
+
case T_TRUE:
|
406
401
|
grn_obj_reinit(context, bulk, GRN_DB_BOOL, 0);
|
407
402
|
GRN_BOOL_SET(context, bulk, GRN_TRUE);
|
408
403
|
break;
|
409
|
-
|
404
|
+
case T_FALSE:
|
410
405
|
grn_obj_reinit(context, bulk, GRN_DB_BOOL, 0);
|
411
406
|
GRN_BOOL_SET(context, bulk, GRN_FALSE);
|
412
407
|
break;
|
413
|
-
|
408
|
+
default:
|
414
409
|
if (RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cTime))) {
|
415
410
|
VALUE sec, usec;
|
416
411
|
int64_t time_value;
|
@@ -457,14 +452,21 @@ rb_grn_bulk_from_ruby_object_with_type (VALUE object, grn_ctx *context,
|
|
457
452
|
{
|
458
453
|
const char *string;
|
459
454
|
unsigned int size;
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
455
|
+
union {
|
456
|
+
int8_t int8_value;
|
457
|
+
uint8_t uint8_value;
|
458
|
+
int16_t int16_value;
|
459
|
+
uint16_t uint16_value;
|
460
|
+
int32_t int32_value;
|
461
|
+
uint32_t uint32_value;
|
462
|
+
int64_t int64_value;
|
463
|
+
uint64_t uint64_value;
|
464
|
+
int64_t time_value;
|
465
|
+
double double_value;
|
466
|
+
grn_geo_point geo_point_value;
|
467
|
+
grn_id record_id;
|
468
|
+
} value;
|
469
|
+
grn_id range;
|
468
470
|
VALUE rb_type_object;
|
469
471
|
grn_obj_flags flags = 0;
|
470
472
|
grn_bool string_p, table_type_p;
|
@@ -474,75 +476,94 @@ rb_grn_bulk_from_ruby_object_with_type (VALUE object, grn_ctx *context,
|
|
474
476
|
type->header.type <= GRN_TABLE_NO_KEY);
|
475
477
|
|
476
478
|
switch (type_id) {
|
477
|
-
|
478
|
-
|
479
|
-
string = (const char *)&
|
480
|
-
size = sizeof(
|
479
|
+
case GRN_DB_INT8:
|
480
|
+
value.int8_value = NUM2SHORT(object);
|
481
|
+
string = (const char *)&(value.int8_value);
|
482
|
+
size = sizeof(value.int8_value);
|
481
483
|
break;
|
482
|
-
|
483
|
-
|
484
|
-
string = (const char *)&
|
485
|
-
size = sizeof(
|
484
|
+
case GRN_DB_UINT8:
|
485
|
+
value.uint8_value = NUM2USHORT(object);
|
486
|
+
string = (const char *)&(value.uint8_value);
|
487
|
+
size = sizeof(value.uint8_value);
|
486
488
|
break;
|
487
|
-
|
488
|
-
|
489
|
-
string = (const char *)&
|
490
|
-
size = sizeof(
|
489
|
+
case GRN_DB_INT16:
|
490
|
+
value.int16_value = NUM2SHORT(object);
|
491
|
+
string = (const char *)&(value.int16_value);
|
492
|
+
size = sizeof(value.int16_value);
|
491
493
|
break;
|
492
|
-
|
493
|
-
|
494
|
-
string = (const char *)&
|
495
|
-
size = sizeof(
|
494
|
+
case GRN_DB_UINT16:
|
495
|
+
value.uint16_value = NUM2USHORT(object);
|
496
|
+
string = (const char *)&(value.uint16_value);
|
497
|
+
size = sizeof(value.uint16_value);
|
496
498
|
break;
|
497
|
-
|
498
|
-
|
499
|
-
string = (const char *)&
|
500
|
-
size = sizeof(
|
499
|
+
case GRN_DB_INT32:
|
500
|
+
value.int32_value = NUM2INT(object);
|
501
|
+
string = (const char *)&(value.int32_value);
|
502
|
+
size = sizeof(value.int32_value);
|
501
503
|
break;
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
504
|
+
case GRN_DB_UINT32:
|
505
|
+
value.uint32_value = NUM2UINT(object);
|
506
|
+
string = (const char *)&(value.uint32_value);
|
507
|
+
size = sizeof(value.uint32_value);
|
508
|
+
break;
|
509
|
+
case GRN_DB_INT64:
|
510
|
+
value.int64_value = NUM2LL(object);
|
511
|
+
string = (const char *)&(value.int64_value);
|
512
|
+
size = sizeof(value.int64_value);
|
513
|
+
break;
|
514
|
+
case GRN_DB_UINT64:
|
515
|
+
value.uint64_value = NUM2ULL(object);
|
516
|
+
string = (const char *)&(value.uint64_value);
|
517
|
+
size = sizeof(value.uint64_value);
|
518
|
+
break;
|
519
|
+
case GRN_DB_FLOAT:
|
520
|
+
value.double_value = NUM2DBL(object);
|
521
|
+
string = (const char *)&(value.double_value);
|
522
|
+
size = sizeof(value.double_value);
|
523
|
+
break;
|
524
|
+
case GRN_DB_TIME: {
|
525
|
+
VALUE rb_sec, rb_usec;
|
526
|
+
int64_t sec;
|
527
|
+
int32_t usec;
|
528
|
+
|
529
|
+
if (string_p) {
|
530
|
+
ID id_parse;
|
531
|
+
CONST_ID(id_parse, "parse");
|
532
|
+
object = rb_funcall(rb_cTime, id_parse, 1, object);
|
533
|
+
}
|
524
534
|
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
break;
|
536
|
-
}
|
535
|
+
switch (TYPE(object)) {
|
536
|
+
case T_FIXNUM:
|
537
|
+
case T_BIGNUM:
|
538
|
+
sec = NUM2LL(object);
|
539
|
+
usec = 0;
|
540
|
+
break;
|
541
|
+
case T_FLOAT:
|
542
|
+
rb_sec = rb_funcall(object, rb_intern("to_i"), 0);
|
543
|
+
rb_usec = rb_funcall(object, rb_intern("remainder"), 1,
|
544
|
+
INT2NUM(1));
|
537
545
|
|
538
|
-
|
546
|
+
sec = NUM2LL(rb_sec);
|
547
|
+
usec = (int32_t)(NUM2DBL(rb_usec) * 1000000);
|
548
|
+
break;
|
549
|
+
case T_NIL:
|
550
|
+
sec = 0;
|
551
|
+
usec = 0;
|
552
|
+
break;
|
553
|
+
default:
|
554
|
+
sec = NUM2LL(rb_funcall(object, rb_intern("to_i"), 0));
|
555
|
+
usec = NUM2INT(rb_funcall(object, rb_intern("usec"), 0));
|
556
|
+
break;
|
539
557
|
}
|
540
|
-
|
541
|
-
|
558
|
+
|
559
|
+
value.time_value = GRN_TIME_PACK(sec, usec);
|
560
|
+
string = (const char *)&(value.time_value);
|
561
|
+
size = sizeof(value.time_value);
|
542
562
|
break;
|
543
|
-
|
544
|
-
|
545
|
-
|
563
|
+
}
|
564
|
+
case GRN_DB_SHORT_TEXT:
|
565
|
+
case GRN_DB_TEXT:
|
566
|
+
case GRN_DB_LONG_TEXT:
|
546
567
|
string = StringValuePtr(object);
|
547
568
|
size = RSTRING_LEN(object);
|
548
569
|
range = grn_obj_get_range(context, type);
|
@@ -552,44 +573,43 @@ rb_grn_bulk_from_ruby_object_with_type (VALUE object, grn_ctx *context,
|
|
552
573
|
size, range);
|
553
574
|
flags |= GRN_OBJ_DO_SHALLOW_COPY;
|
554
575
|
break;
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
rb_intern("new"), 1, object);
|
566
|
-
}
|
567
|
-
rb_geo_point = rb_funcall(rb_geo_point, rb_intern("to_msec"), 0);
|
568
|
-
rb_latitude = rb_funcall(rb_geo_point, rb_intern("latitude"), 0);
|
569
|
-
rb_longitude = rb_funcall(rb_geo_point, rb_intern("longitude"), 0);
|
570
|
-
geo_point_value.latitude = NUM2INT(rb_latitude);
|
571
|
-
geo_point_value.longitude = NUM2INT(rb_longitude);
|
572
|
-
string = (const char *)&geo_point_value;
|
573
|
-
size = sizeof(geo_point_value);
|
576
|
+
case GRN_DB_TOKYO_GEO_POINT:
|
577
|
+
case GRN_DB_WGS84_GEO_POINT: {
|
578
|
+
VALUE rb_geo_point;
|
579
|
+
VALUE rb_latitude, rb_longitude;
|
580
|
+
if (type_id == GRN_DB_TOKYO_GEO_POINT) {
|
581
|
+
rb_geo_point = rb_funcall(rb_cGrnTokyoGeoPoint,
|
582
|
+
rb_intern("new"), 1, object);
|
583
|
+
} else {
|
584
|
+
rb_geo_point = rb_funcall(rb_cGrnWGS84GeoPoint,
|
585
|
+
rb_intern("new"), 1, object);
|
574
586
|
}
|
587
|
+
rb_geo_point = rb_funcall(rb_geo_point, rb_intern("to_msec"), 0);
|
588
|
+
rb_latitude = rb_funcall(rb_geo_point, rb_intern("latitude"), 0);
|
589
|
+
rb_longitude = rb_funcall(rb_geo_point, rb_intern("longitude"), 0);
|
590
|
+
value.geo_point_value.latitude = NUM2INT(rb_latitude);
|
591
|
+
value.geo_point_value.longitude = NUM2INT(rb_longitude);
|
592
|
+
string = (const char *)&(value.geo_point_value);
|
593
|
+
size = sizeof(value.geo_point_value);
|
575
594
|
break;
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
595
|
+
}
|
596
|
+
case GRN_DB_VOID:
|
597
|
+
case GRN_DB_DELIMIT:
|
598
|
+
case GRN_DB_UNIGRAM:
|
599
|
+
case GRN_DB_BIGRAM:
|
600
|
+
case GRN_DB_TRIGRAM:
|
601
|
+
case GRN_DB_MECAB:
|
582
602
|
rb_type_object = GRNOBJECT2RVAL(Qnil, context, type, GRN_FALSE);
|
583
603
|
rb_raise(rb_eArgError,
|
584
604
|
"unbulkable type: %s",
|
585
605
|
rb_grn_inspect(rb_type_object));
|
586
606
|
break;
|
587
|
-
|
607
|
+
default:
|
588
608
|
if (table_type_p &&
|
589
609
|
(NIL_P(object) || (string_p && RSTRING_LEN(object) == 0))) {
|
590
|
-
record_id = GRN_ID_NIL;
|
591
|
-
string = (const char *)&record_id;
|
592
|
-
size = sizeof(record_id);
|
610
|
+
value.record_id = GRN_ID_NIL;
|
611
|
+
string = (const char *)&(value.record_id);
|
612
|
+
size = sizeof(value.record_id);
|
593
613
|
if (bulk && bulk->header.domain != type_id) {
|
594
614
|
grn_obj_reinit(context, bulk, type_id, 0);
|
595
615
|
}
|
@@ -743,50 +763,48 @@ rb_grn_uvector_to_ruby_object (grn_ctx *context, grn_obj *uvector,
|
|
743
763
|
}
|
744
764
|
|
745
765
|
switch (range->header.type) {
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
current += value_size;
|
764
|
-
}
|
765
|
-
GRN_OBJ_FIN(context, &value);
|
766
|
+
case GRN_TYPE: {
|
767
|
+
const char *current, *end;
|
768
|
+
grn_id range_id;
|
769
|
+
grn_obj value;
|
770
|
+
int value_size;
|
771
|
+
value_size = grn_obj_get_range(context, range);
|
772
|
+
array = rb_ary_new();
|
773
|
+
current = GRN_BULK_HEAD(uvector);
|
774
|
+
end = GRN_BULK_CURR(uvector);
|
775
|
+
range_id = grn_obj_id(context, range);
|
776
|
+
GRN_OBJ_INIT(&value, GRN_BULK, GRN_OBJ_DO_SHALLOW_COPY, range_id);
|
777
|
+
while (current < end) {
|
778
|
+
VALUE rb_value;
|
779
|
+
GRN_TEXT_SET(context, &value, current, value_size);
|
780
|
+
rb_value = GRNBULK2RVAL(context, &value, range, related_object);
|
781
|
+
rb_ary_push(array, rb_value);
|
782
|
+
current += value_size;
|
766
783
|
}
|
784
|
+
GRN_OBJ_FIN(context, &value);
|
767
785
|
break;
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
}
|
784
|
-
rb_ary_push(array, record);
|
785
|
-
current++;
|
786
|
+
}
|
787
|
+
case GRN_TABLE_HASH_KEY:
|
788
|
+
case GRN_TABLE_PAT_KEY:
|
789
|
+
case GRN_TABLE_DAT_KEY:
|
790
|
+
case GRN_TABLE_NO_KEY: {
|
791
|
+
grn_id *current, *end;
|
792
|
+
VALUE rb_range = Qnil;
|
793
|
+
array = rb_ary_new();
|
794
|
+
rb_range = GRNTABLE2RVAL(context, range, GRN_FALSE);
|
795
|
+
current = (grn_id *)GRN_BULK_HEAD(uvector);
|
796
|
+
end = (grn_id *)GRN_BULK_CURR(uvector);
|
797
|
+
while (current < end) {
|
798
|
+
VALUE record = Qnil;
|
799
|
+
if (*current != GRN_ID_NIL) {
|
800
|
+
record = rb_grn_record_new(rb_range, *current, Qnil);
|
786
801
|
}
|
802
|
+
rb_ary_push(array, record);
|
803
|
+
current++;
|
787
804
|
}
|
788
805
|
break;
|
789
|
-
|
806
|
+
}
|
807
|
+
default:
|
790
808
|
rb_raise(rb_eTypeError,
|
791
809
|
"unknown range uvector can't be converted: %s(%#x): <%s>",
|
792
810
|
rb_grn_inspect_type(range->header.type),
|
@@ -864,10 +882,10 @@ rb_grn_uvector_from_ruby_object_reference (UVectorFromRubyData *data)
|
|
864
882
|
|
865
883
|
rb_value = rb_values[i];
|
866
884
|
switch (TYPE(rb_value)) {
|
867
|
-
|
885
|
+
case T_FIXNUM:
|
868
886
|
id = NUM2UINT(rb_value);
|
869
887
|
break;
|
870
|
-
|
888
|
+
default:
|
871
889
|
CONST_ID(id_record_raw_id, "record_raw_id");
|
872
890
|
if (rb_respond_to(rb_value, id_record_raw_id)) {
|
873
891
|
id = NUM2UINT(rb_funcall(rb_value, id_record_raw_id, 0));
|
@@ -897,16 +915,16 @@ rb_grn_uvector_from_ruby_object_body (VALUE user_data)
|
|
897
915
|
|
898
916
|
domain = data->domain;
|
899
917
|
switch (domain->header.type) {
|
900
|
-
|
918
|
+
case GRN_TYPE:
|
901
919
|
rb_grn_uvector_from_ruby_object_type(data);
|
902
920
|
break;
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
|
921
|
+
case GRN_TABLE_HASH_KEY:
|
922
|
+
case GRN_TABLE_PAT_KEY:
|
923
|
+
case GRN_TABLE_DAT_KEY:
|
924
|
+
case GRN_TABLE_NO_KEY:
|
907
925
|
rb_grn_uvector_from_ruby_object_reference(data);
|
908
926
|
break;
|
909
|
-
|
927
|
+
default:
|
910
928
|
rb_raise(rb_eTypeError,
|
911
929
|
"can't convert to unknown domain uvector: %s(%#x): <%s>",
|
912
930
|
rb_grn_inspect_type(domain->header.type),
|
@@ -975,23 +993,23 @@ rb_grn_value_to_ruby_object (grn_ctx *context,
|
|
975
993
|
return Qnil;
|
976
994
|
|
977
995
|
switch (value->header.type) {
|
978
|
-
|
996
|
+
case GRN_VOID:
|
979
997
|
return Qnil;
|
980
998
|
break;
|
981
|
-
|
999
|
+
case GRN_BULK:
|
982
1000
|
if (GRN_BULK_EMPTYP(value))
|
983
1001
|
return Qnil;
|
984
1002
|
if (value->header.domain == GRN_ID_NIL && range)
|
985
1003
|
value->header.domain = grn_obj_id(context, range);
|
986
1004
|
return GRNBULK2RVAL(context, value, range, related_object);
|
987
1005
|
break;
|
988
|
-
|
1006
|
+
case GRN_UVECTOR:
|
989
1007
|
return GRNUVECTOR2RVAL(context, value, range, related_object);
|
990
1008
|
break;
|
991
|
-
|
1009
|
+
case GRN_VECTOR:
|
992
1010
|
return GRNVECTOR2RVAL(context, value);
|
993
1011
|
break;
|
994
|
-
|
1012
|
+
default:
|
995
1013
|
rb_raise(rb_eGrnError,
|
996
1014
|
"unsupported value type: %s(%#x): %s",
|
997
1015
|
rb_grn_inspect_type(value->header.type),
|
@@ -1065,16 +1083,16 @@ rb_grn_key_from_ruby_object (VALUE rb_key, grn_ctx *context,
|
|
1065
1083
|
return RVAL2GRNBULK(rb_key, context, key);
|
1066
1084
|
|
1067
1085
|
switch (domain->header.type) {
|
1068
|
-
|
1086
|
+
case GRN_TYPE:
|
1069
1087
|
return RVAL2GRNBULK_WITH_TYPE(rb_key, context, key, domain_id, domain);
|
1070
1088
|
break;
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1074
|
-
|
1089
|
+
case GRN_TABLE_HASH_KEY:
|
1090
|
+
case GRN_TABLE_PAT_KEY:
|
1091
|
+
case GRN_TABLE_DAT_KEY:
|
1092
|
+
case GRN_TABLE_NO_KEY:
|
1075
1093
|
id = RVAL2GRNID(rb_key, context, domain, related_object);
|
1076
1094
|
break;
|
1077
|
-
|
1095
|
+
default:
|
1078
1096
|
if (!RVAL2CBOOL(rb_obj_is_kind_of(rb_key, rb_cInteger)))
|
1079
1097
|
rb_raise(rb_eGrnError,
|
1080
1098
|
"should be unsigned integer: <%s>: <%s>",
|
@@ -1144,42 +1162,42 @@ rb_grn_obj_to_ruby_object (VALUE klass, grn_ctx *context,
|
|
1144
1162
|
/* klass = GRNOBJECT2RCLASS(obj); */
|
1145
1163
|
|
1146
1164
|
switch (obj->header.type) {
|
1147
|
-
|
1165
|
+
case GRN_VOID:
|
1148
1166
|
if (GRN_BULK_VSIZE(obj) > 0)
|
1149
1167
|
return rb_str_new(GRN_BULK_HEAD(obj), GRN_BULK_VSIZE(obj));
|
1150
1168
|
else
|
1151
1169
|
return Qnil;
|
1152
1170
|
break;
|
1153
|
-
|
1171
|
+
case GRN_BULK:
|
1154
1172
|
return GRNBULK2RVAL(context, obj, NULL, related_object);
|
1155
1173
|
break;
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1174
|
+
/* case GRN_PTR: */
|
1175
|
+
/* case GRN_UVECTOR: */
|
1176
|
+
/* case GRN_PVECTOR: */
|
1177
|
+
case GRN_VECTOR:
|
1160
1178
|
return GRNVECTOR2RVAL(context, obj);
|
1161
1179
|
break;
|
1162
|
-
|
1163
|
-
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1180
|
+
/* case GRN_MSG: */
|
1181
|
+
/* case GRN_QUERY: */
|
1182
|
+
/* case GRN_ACCESSOR: */
|
1183
|
+
/* case GRN_SNIP: */
|
1184
|
+
/* case GRN_PATSNIP: */
|
1185
|
+
/* case GRN_CURSOR_TABLE_HASH_KEY: */
|
1186
|
+
/* case GRN_CURSOR_TABLE_PAT_KEY: */
|
1187
|
+
/* case GRN_CURSOR_TABLE_NO_KEY: */
|
1188
|
+
/* case GRN_CURSOR_COLUMN_INDEX: */
|
1189
|
+
/* case GRN_TYPE: */
|
1190
|
+
/* case GRN_PROC: */
|
1191
|
+
/* case GRN_EXPR: */
|
1192
|
+
/* case GRN_TABLE_HASH_KEY: */
|
1193
|
+
/* case GRN_TABLE_PAT_KEY: */
|
1194
|
+
/* case GRN_TABLE_DAT_KEY: */
|
1195
|
+
/* case GRN_TABLE_NO_KEY: */
|
1196
|
+
/* case GRN_DB: */
|
1197
|
+
/* case GRN_COLUMN_FIX_SIZE: */
|
1198
|
+
/* case GRN_COLUMN_VAR_SIZE: */
|
1199
|
+
/* case GRN_COLUMN_INDEX: */
|
1200
|
+
default:
|
1183
1201
|
rb_raise(rb_eTypeError,
|
1184
1202
|
"unsupported groonga object: %s(%#x): <%s>",
|
1185
1203
|
rb_grn_inspect_type(obj->header.type),
|