rroonga 9.0.3 → 11.0.0
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.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/Rakefile +26 -135
- data/doc/text/news.md +79 -1
- data/doc/text/tutorial.md +1 -1
- data/ext/groonga/extconf.rb +19 -74
- data/ext/groonga/rb-grn-accessor.c +2 -2
- data/ext/groonga/rb-grn-column-cache.c +3 -3
- data/ext/groonga/rb-grn-column.c +4 -4
- data/ext/groonga/rb-grn-context.c +109 -58
- data/ext/groonga/rb-grn-data-column.c +4 -4
- data/ext/groonga/rb-grn-database.c +45 -26
- data/ext/groonga/rb-grn-double-array-trie.c +2 -2
- data/ext/groonga/rb-grn-encoding-support.c +2 -2
- data/ext/groonga/rb-grn-exception.c +14 -0
- data/ext/groonga/rb-grn-expression-builder.c +3 -3
- data/ext/groonga/rb-grn-expression.c +3 -3
- data/ext/groonga/rb-grn-fix-size-column.c +2 -2
- data/ext/groonga/rb-grn-flushable.c +9 -1
- data/ext/groonga/rb-grn-hash.c +2 -2
- data/ext/groonga/rb-grn-index-column.c +30 -2
- data/ext/groonga/rb-grn-index-cursor.c +21 -2
- data/ext/groonga/rb-grn-inverted-index-cursor.c +3 -3
- data/ext/groonga/rb-grn-logger.c +17 -3
- data/ext/groonga/rb-grn-object.c +266 -31
- data/ext/groonga/rb-grn-operator.c +100 -259
- data/ext/groonga/rb-grn-patricia-trie.c +2 -2
- data/ext/groonga/rb-grn-plugin.c +34 -22
- data/ext/groonga/rb-grn-request-timer-id.c +2 -2
- data/ext/groonga/rb-grn-snippet.c +3 -3
- data/ext/groonga/rb-grn-table-cursor-key-support.c +2 -2
- data/ext/groonga/rb-grn-table-cursor.c +3 -3
- data/ext/groonga/rb-grn-table-key-support.c +28 -9
- data/ext/groonga/rb-grn-table.c +180 -130
- data/ext/groonga/rb-grn-type.c +5 -1
- data/ext/groonga/rb-grn-utils.c +17 -1
- data/ext/groonga/rb-grn-variable-size-column.c +2 -2
- data/ext/groonga/rb-grn-variable.c +2 -2
- data/ext/groonga/rb-grn.h +11 -14
- data/ext/groonga/rb-groonga.c +6 -2
- data/lib/groonga.rb +3 -7
- data/lib/groonga/context.rb +32 -0
- data/lib/groonga/dumper.rb +3 -0
- data/lib/groonga/record.rb +2 -2
- data/rroonga-build.rb +5 -4
- data/rroonga.gemspec +8 -6
- data/test/groonga-test-utils.rb +37 -5
- data/test/run-test.rb +1 -3
- data/test/test-accessor.rb +63 -7
- data/test/test-column.rb +12 -1
- data/test/test-context.rb +25 -0
- data/test/test-exception.rb +5 -0
- data/test/test-flushable.rb +51 -6
- data/test/test-index-column.rb +70 -9
- data/test/test-index-cursor.rb +26 -0
- data/test/test-logger.rb +56 -11
- data/test/test-plugin.rb +1 -0
- data/test/test-query-logger.rb +4 -3
- data/test/test-ractor.rb +65 -0
- data/test/test-record.rb +2 -1
- data/test/test-remote.rb +58 -10
- data/test/test-schema-dumper.rb +13 -0
- data/test/test-schema.rb +9 -1
- data/test/test-table-arrow.rb +22 -10
- data/test/test-table.rb +21 -1
- data/test/test-variable.rb +23 -7
- metadata +72 -97
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/*
|
3
|
-
Copyright (C) 2009 Kouhei
|
3
|
+
Copyright (C) 2009-2021 Sutou Kouhei <kou@clear-code.com>
|
4
4
|
|
5
5
|
This library is free software; you can redistribute it and/or
|
6
6
|
modify it under the terms of the GNU Lesser General Public
|
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
#include "rb-grn.h"
|
20
20
|
|
21
|
-
#define SELF(object) ((RbGrnAccessor *)
|
21
|
+
#define SELF(object) ((RbGrnAccessor *)RTYPEDDATA_DATA(object))
|
22
22
|
|
23
23
|
VALUE rb_cGrnAccessor;
|
24
24
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/* vim: set sts=4 sw=4 ts=8 noet: */
|
3
3
|
/*
|
4
|
-
Copyright (C) 2018 Kouhei
|
4
|
+
Copyright (C) 2018-2021 Sutou Kouhei <kou@clear-code.com>
|
5
5
|
|
6
6
|
This library is free software; you can redistribute it and/or
|
7
7
|
modify it under the terms of the GNU Lesser General Public
|
@@ -120,7 +120,7 @@ rb_grn_column_cache_initialize (VALUE self, VALUE rb_column)
|
|
120
120
|
rb_grn_column_cache->context = NULL;
|
121
121
|
rb_grn_column_cache->rb_column = rb_column;
|
122
122
|
rb_grn_column_cache->column_cache = NULL;
|
123
|
-
|
123
|
+
RTYPEDDATA_DATA(self) = rb_grn_column_cache;
|
124
124
|
|
125
125
|
column = RVAL2GRNCOLUMN(rb_column, &(rb_grn_column_cache->context));
|
126
126
|
context = rb_grn_column_cache->context;
|
@@ -216,7 +216,7 @@ void
|
|
216
216
|
rb_grn_init_column_cache (VALUE mGrn)
|
217
217
|
{
|
218
218
|
rb_cGrnColumnCache =
|
219
|
-
rb_define_class_under(mGrn, "ColumnCache",
|
219
|
+
rb_define_class_under(mGrn, "ColumnCache", rb_cObject);
|
220
220
|
|
221
221
|
rb_define_alloc_func(rb_cGrnColumnCache, rb_grn_column_cache_allocate);
|
222
222
|
|
data/ext/groonga/rb-grn-column.c
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/* vim: set sts=4 sw=4 ts=8 noet: */
|
3
3
|
/*
|
4
|
-
Copyright (C) 2009-
|
4
|
+
Copyright (C) 2009-2021 Sutou Kouhei <kou@clear-code.com>
|
5
5
|
Copyright (C) 2016 Masafumi Yokoyama <yokoyama@clear-code.com>
|
6
6
|
|
7
7
|
This library is free software; you can redistribute it and/or
|
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
#include "rb-grn.h"
|
22
22
|
|
23
|
-
#define SELF(object) ((RbGrnColumn *)
|
23
|
+
#define SELF(object) ((RbGrnColumn *)RTYPEDDATA_DATA(object))
|
24
24
|
|
25
25
|
VALUE rb_cGrnColumn;
|
26
26
|
|
@@ -388,7 +388,7 @@ rb_grn_column_select (int argc, VALUE *argv, VALUE self)
|
|
388
388
|
rb_funcall(builder, rb_intern("allow_leading_not="), 1, rb_allow_leading_not);
|
389
389
|
rb_expression = rb_grn_column_expression_builder_build(builder);
|
390
390
|
}
|
391
|
-
rb_grn_object_deconstruct(RB_GRN_OBJECT(
|
391
|
+
rb_grn_object_deconstruct(RB_GRN_OBJECT(RTYPEDDATA_DATA(rb_expression)),
|
392
392
|
&expression, NULL,
|
393
393
|
NULL, NULL, NULL, NULL);
|
394
394
|
|
@@ -831,7 +831,7 @@ rb_grn_column_rename (VALUE self, VALUE rb_name)
|
|
831
831
|
rc = grn_column_rename(context, column, name, name_size);
|
832
832
|
rb_grn_context_check(context, self);
|
833
833
|
rb_grn_rc_check(rc, self);
|
834
|
-
rb_grn_named_object_set_name(RB_GRN_NAMED_OBJECT(
|
834
|
+
rb_grn_named_object_set_name(RB_GRN_NAMED_OBJECT(RTYPEDDATA_DATA(self)),
|
835
835
|
name, name_size);
|
836
836
|
return self;
|
837
837
|
}
|
@@ -1,7 +1,8 @@
|
|
1
1
|
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/*
|
3
|
-
Copyright (C) 2010-
|
3
|
+
Copyright (C) 2010-2021 Sutou Kouhei <kou@clear-code.com>
|
4
4
|
Copyright (C) 2016 Masafumi Yokoyama <yokoyama@clear-code.com>
|
5
|
+
Copyright (C) 2019 Horimoto Yasuhiro <horimoto@clear-code.com>
|
5
6
|
|
6
7
|
This library is free software; you can redistribute it and/or
|
7
8
|
modify it under the terms of the GNU Lesser General Public
|
@@ -17,12 +18,6 @@
|
|
17
18
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
18
19
|
*/
|
19
20
|
|
20
|
-
#include "rb-grn.h"
|
21
|
-
|
22
|
-
#define SELF(object) (RVAL2GRNCONTEXT(object))
|
23
|
-
|
24
|
-
static VALUE cGrnContext;
|
25
|
-
|
26
21
|
/*
|
27
22
|
* Document-class: Groonga::Context
|
28
23
|
*
|
@@ -44,23 +39,11 @@ static VALUE cGrnContext;
|
|
44
39
|
* する。
|
45
40
|
*/
|
46
41
|
|
47
|
-
|
48
|
-
rb_grn_context_from_ruby_object (VALUE object)
|
49
|
-
{
|
50
|
-
RbGrnContext *rb_grn_context;
|
42
|
+
#include "rb-grn.h"
|
51
43
|
|
52
|
-
|
53
|
-
rb_raise(rb_eTypeError, "not a Groonga context");
|
54
|
-
}
|
44
|
+
#define SELF(object) (RVAL2GRNCONTEXT(object))
|
55
45
|
|
56
|
-
|
57
|
-
if (!rb_grn_context)
|
58
|
-
rb_raise(rb_eGrnError, "Groonga context is NULL");
|
59
|
-
if (!rb_grn_context->context)
|
60
|
-
rb_raise(rb_eGrnClosed,
|
61
|
-
"can't access already closed Groonga context");
|
62
|
-
return rb_grn_context->context;
|
63
|
-
}
|
46
|
+
static VALUE cGrnContext;
|
64
47
|
|
65
48
|
void
|
66
49
|
rb_grn_context_register_floating_object (RbGrnObject *rb_grn_object)
|
@@ -209,10 +192,48 @@ rb_grn_context_free (void *pointer)
|
|
209
192
|
xfree(rb_grn_context);
|
210
193
|
}
|
211
194
|
|
195
|
+
static rb_data_type_t data_type = {
|
196
|
+
"Groonga::Context",
|
197
|
+
{
|
198
|
+
NULL,
|
199
|
+
rb_grn_context_free,
|
200
|
+
NULL,
|
201
|
+
},
|
202
|
+
NULL,
|
203
|
+
NULL,
|
204
|
+
RUBY_TYPED_FREE_IMMEDIATELY
|
205
|
+
};
|
206
|
+
|
207
|
+
RbGrnContext *
|
208
|
+
rb_grn_context_get_struct (VALUE rb_context)
|
209
|
+
{
|
210
|
+
if (!RVAL2CBOOL(rb_obj_is_kind_of(rb_context, cGrnContext))) {
|
211
|
+
rb_raise(rb_eTypeError,
|
212
|
+
"not a Groonga context: %" PRIsVALUE,
|
213
|
+
rb_context);
|
214
|
+
}
|
215
|
+
|
216
|
+
RbGrnContext *rb_grn_context;
|
217
|
+
TypedData_Get_Struct(rb_context, RbGrnContext, &data_type, rb_grn_context);
|
218
|
+
return rb_grn_context;
|
219
|
+
}
|
220
|
+
|
221
|
+
grn_ctx *
|
222
|
+
rb_grn_context_from_ruby_object (VALUE rb_context)
|
223
|
+
{
|
224
|
+
RbGrnContext *rb_grn_context = rb_grn_context_get_struct(rb_context);
|
225
|
+
if (!rb_grn_context)
|
226
|
+
rb_raise(rb_eGrnError, "Groonga context is NULL");
|
227
|
+
if (!rb_grn_context->context)
|
228
|
+
rb_raise(rb_eGrnClosed,
|
229
|
+
"can't access already closed Groonga context");
|
230
|
+
return rb_grn_context->context;
|
231
|
+
}
|
232
|
+
|
212
233
|
static VALUE
|
213
234
|
rb_grn_context_alloc (VALUE klass)
|
214
235
|
{
|
215
|
-
return
|
236
|
+
return TypedData_Wrap_Struct(klass, &data_type, NULL);
|
216
237
|
}
|
217
238
|
|
218
239
|
static grn_obj *
|
@@ -425,41 +446,50 @@ rb_grn_context_s_set_default_options (VALUE self, VALUE options)
|
|
425
446
|
}
|
426
447
|
|
427
448
|
/*
|
428
|
-
*
|
429
|
-
*
|
430
|
-
*
|
431
|
-
*
|
432
|
-
*
|
433
|
-
*
|
434
|
-
*
|
449
|
+
* Creates a new context.
|
450
|
+
*
|
451
|
+
* @overload new(encoding: nil)
|
452
|
+
* @param encoding [Groonga::Encoding] The encoding to be used in
|
453
|
+
* the newly created context. See {Groonga::Encoding} how to specify
|
454
|
+
* encoding.
|
455
|
+
* @return [Groonga::Context] The newly created context.
|
435
456
|
*/
|
436
457
|
static VALUE
|
437
458
|
rb_grn_context_initialize (int argc, VALUE *argv, VALUE self)
|
438
459
|
{
|
439
|
-
|
440
|
-
|
441
|
-
int flags = 0; /* TODO: GRN_CTX_PER_DB */
|
442
|
-
VALUE options, default_options;
|
443
|
-
VALUE rb_encoding;
|
460
|
+
VALUE options;
|
461
|
+
rb_scan_args(argc, argv, ":", &options);
|
444
462
|
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
463
|
+
static ID keyword_ids[1];
|
464
|
+
if (!keyword_ids[0]) {
|
465
|
+
CONST_ID(keyword_ids[0], "encoding");
|
466
|
+
}
|
467
|
+
VALUE kwargs[1];
|
468
|
+
VALUE rb_encoding = Qundef;
|
469
|
+
if (!NIL_P(options)) {
|
470
|
+
rb_get_kwargs(options, keyword_ids, 0, 1, kwargs);
|
471
|
+
rb_encoding = kwargs[0];
|
472
|
+
}
|
473
|
+
if (rb_encoding == Qundef) {
|
474
|
+
VALUE default_options =
|
475
|
+
rb_grn_context_s_get_default_options(rb_obj_class(self));
|
476
|
+
if (!NIL_P(default_options)) {
|
477
|
+
rb_get_kwargs(default_options, keyword_ids, 0, 1, kwargs);
|
478
|
+
rb_encoding = kwargs[0];
|
479
|
+
}
|
480
|
+
if (rb_encoding == Qundef) {
|
481
|
+
rb_encoding = Qnil;
|
482
|
+
}
|
483
|
+
}
|
457
484
|
|
458
|
-
rb_grn_context = ALLOC(RbGrnContext);
|
459
|
-
|
485
|
+
RbGrnContext *rb_grn_context = ALLOC(RbGrnContext);
|
486
|
+
RTYPEDDATA_DATA(self) = rb_grn_context;
|
460
487
|
rb_grn_context->self = self;
|
488
|
+
int flags = 0; /* TODO: GRN_CTX_PER_DB */
|
461
489
|
grn_ctx_init(&(rb_grn_context->context_entity), flags);
|
462
|
-
|
490
|
+
grn_ctx *context =
|
491
|
+
rb_grn_context->context =
|
492
|
+
&(rb_grn_context->context_entity);
|
463
493
|
rb_grn_context_check(context, self);
|
464
494
|
|
465
495
|
GRN_CTX_USER_DATA(context)->ptr = rb_grn_context;
|
@@ -490,9 +520,7 @@ rb_grn_context_initialize (int argc, VALUE *argv, VALUE self)
|
|
490
520
|
static VALUE
|
491
521
|
rb_grn_context_close (VALUE self)
|
492
522
|
{
|
493
|
-
RbGrnContext *rb_grn_context;
|
494
|
-
|
495
|
-
Data_Get_Struct(self, RbGrnContext, rb_grn_context);
|
523
|
+
RbGrnContext *rb_grn_context = RTYPEDDATA_DATA(self);
|
496
524
|
if (rb_grn_context->context) {
|
497
525
|
rb_grn_context_fin(rb_grn_context);
|
498
526
|
}
|
@@ -508,10 +536,7 @@ rb_grn_context_close (VALUE self)
|
|
508
536
|
static VALUE
|
509
537
|
rb_grn_context_closed_p (VALUE self)
|
510
538
|
{
|
511
|
-
RbGrnContext *rb_grn_context;
|
512
|
-
|
513
|
-
Data_Get_Struct(self, RbGrnContext, rb_grn_context);
|
514
|
-
|
539
|
+
RbGrnContext *rb_grn_context = RTYPEDDATA_DATA(self);
|
515
540
|
return CBOOL2RVAL(rb_grn_context->context == NULL);
|
516
541
|
}
|
517
542
|
|
@@ -604,6 +629,27 @@ rb_grn_context_get_ruby_encoding (VALUE self)
|
|
604
629
|
return rb_grn_encoding_to_ruby_encoding_object(encoding);
|
605
630
|
}
|
606
631
|
|
632
|
+
/*
|
633
|
+
* @overload force_match_escalation?
|
634
|
+
* @return [Bool]
|
635
|
+
*/
|
636
|
+
static VALUE
|
637
|
+
rb_grn_context_force_match_escalation_p (VALUE self)
|
638
|
+
{
|
639
|
+
return CBOOL2RVAL(grn_ctx_get_force_match_escalation(SELF(self)));
|
640
|
+
}
|
641
|
+
|
642
|
+
/*
|
643
|
+
* @overload force_match_escalation=(force_match_escalation)
|
644
|
+
*/
|
645
|
+
static VALUE
|
646
|
+
rb_grn_context_set_force_match_escalation (VALUE self, VALUE force_match_escalation)
|
647
|
+
{
|
648
|
+
grn_ctx_set_force_match_escalation(SELF(self),
|
649
|
+
RVAL2CBOOL(force_match_escalation));
|
650
|
+
return force_match_escalation;
|
651
|
+
}
|
652
|
+
|
607
653
|
/*
|
608
654
|
* このコンテキストを使って検索したときに検索の挙動をエスカレー
|
609
655
|
* ションする閾値を返します。
|
@@ -1013,7 +1059,7 @@ rb_grn_context_object_created (VALUE rb_context, VALUE rb_object)
|
|
1013
1059
|
void
|
1014
1060
|
rb_grn_init_context (VALUE mGrn)
|
1015
1061
|
{
|
1016
|
-
cGrnContext = rb_define_class_under(mGrn, "Context",
|
1062
|
+
cGrnContext = rb_define_class_under(mGrn, "Context", rb_cObject);
|
1017
1063
|
rb_define_alloc_func(cGrnContext, rb_grn_context_alloc);
|
1018
1064
|
|
1019
1065
|
rb_cv_set(cGrnContext, "@@default", Qnil);
|
@@ -1039,6 +1085,11 @@ rb_grn_init_context (VALUE mGrn)
|
|
1039
1085
|
rb_define_method(cGrnContext, "encoding=", rb_grn_context_set_encoding, 1);
|
1040
1086
|
rb_define_method(cGrnContext, "ruby_encoding",
|
1041
1087
|
rb_grn_context_get_ruby_encoding, 0);
|
1088
|
+
|
1089
|
+
rb_define_method(cGrnContext, "force_match_escalation?",
|
1090
|
+
rb_grn_context_force_match_escalation_p, 0);
|
1091
|
+
rb_define_method(cGrnContext, "force_match_escalation=",
|
1092
|
+
rb_grn_context_set_force_match_escalation, 1);
|
1042
1093
|
rb_define_method(cGrnContext, "match_escalation_threshold",
|
1043
1094
|
rb_grn_context_get_match_escalation_threshold, 0);
|
1044
1095
|
rb_define_method(cGrnContext, "match_escalation_threshold=",
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/* vim: set sts=4 sw=4 ts=8 noet: */
|
3
3
|
/*
|
4
|
-
Copyright (C) 2016 Kouhei
|
4
|
+
Copyright (C) 2016-2021 Sutou Kouhei <kou@clear-code.com>
|
5
5
|
|
6
6
|
This library is free software; you can redistribute it and/or
|
7
7
|
modify it under the terms of the GNU Lesser General Public
|
@@ -19,7 +19,7 @@
|
|
19
19
|
|
20
20
|
#include "rb-grn.h"
|
21
21
|
|
22
|
-
#define SELF(object) ((RbGrnColumn *)
|
22
|
+
#define SELF(object) ((RbGrnColumn *)RTYPEDDATA_DATA(object))
|
23
23
|
|
24
24
|
VALUE rb_cGrnDataColumn;
|
25
25
|
|
@@ -152,7 +152,7 @@ rb_grn_data_column_apply_window_function (int argc, VALUE *argv, VALUE self)
|
|
152
152
|
rb_builder = rb_grn_record_expression_builder_new(rb_table, Qnil);
|
153
153
|
rb_window_function_call =
|
154
154
|
rb_grn_record_expression_builder_build(rb_builder);
|
155
|
-
rb_grn_object_deconstruct(RB_GRN_OBJECT(
|
155
|
+
rb_grn_object_deconstruct(RB_GRN_OBJECT(RTYPEDDATA_DATA(rb_window_function_call)),
|
156
156
|
&window_function_call, NULL,
|
157
157
|
NULL, NULL, NULL, NULL);
|
158
158
|
|
@@ -231,7 +231,7 @@ rb_grn_data_column_apply_expression (VALUE self)
|
|
231
231
|
|
232
232
|
rb_builder = rb_grn_record_expression_builder_new(rb_table, Qnil);
|
233
233
|
rb_expression = rb_grn_record_expression_builder_build(rb_builder);
|
234
|
-
rb_grn_object_deconstruct(RB_GRN_OBJECT(
|
234
|
+
rb_grn_object_deconstruct(RB_GRN_OBJECT(RTYPEDDATA_DATA(rb_expression)),
|
235
235
|
&expression, NULL,
|
236
236
|
NULL, NULL, NULL, NULL);
|
237
237
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/*
|
3
|
-
Copyright (C) 2009-
|
3
|
+
Copyright (C) 2009-2021 Sutou Kouhei <kou@clear-code.com>
|
4
4
|
Copyright (C) 2016 Masafumi Yokoyama <yokoyama@clear-code.com>
|
5
5
|
|
6
6
|
This library is free software; you can redistribute it and/or
|
@@ -17,12 +17,6 @@
|
|
17
17
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
18
18
|
*/
|
19
19
|
|
20
|
-
#include "rb-grn.h"
|
21
|
-
|
22
|
-
#define SELF(object) ((RbGrnObject *)DATA_PTR(object))
|
23
|
-
|
24
|
-
VALUE rb_cGrnDatabase;
|
25
|
-
|
26
20
|
/*
|
27
21
|
* Document-class: Groonga::Database
|
28
22
|
*
|
@@ -34,22 +28,11 @@ VALUE rb_cGrnDatabase;
|
|
34
28
|
* に作成されないので明示的に作成する必要がある。
|
35
29
|
*/
|
36
30
|
|
37
|
-
|
38
|
-
rb_grn_database_from_ruby_object (VALUE object)
|
39
|
-
{
|
40
|
-
if (!RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cGrnDatabase))) {
|
41
|
-
rb_raise(rb_eTypeError, "not a groonga database");
|
42
|
-
}
|
31
|
+
#include "rb-grn.h"
|
43
32
|
|
44
|
-
|
45
|
-
}
|
33
|
+
#define SELF(object) ((RbGrnObject *)RTYPEDDATA_DATA(object))
|
46
34
|
|
47
|
-
VALUE
|
48
|
-
rb_grn_database_to_ruby_object (grn_ctx *context, grn_obj *database,
|
49
|
-
grn_bool owner)
|
50
|
-
{
|
51
|
-
return GRNOBJECT2RVAL(rb_cGrnDatabase, context, database, owner);
|
52
|
-
}
|
35
|
+
VALUE rb_cGrnDatabase;
|
53
36
|
|
54
37
|
static void
|
55
38
|
rb_grn_database_mark_existing_ruby_object (grn_ctx *context, grn_obj *database)
|
@@ -86,11 +69,45 @@ rb_grn_database_mark (void *data)
|
|
86
69
|
rb_grn_database_mark_existing_ruby_object(context, database);
|
87
70
|
}
|
88
71
|
|
72
|
+
static void
|
73
|
+
rb_grn_database_free (void *pointer)
|
74
|
+
{
|
75
|
+
rb_grn_object_free(pointer);
|
76
|
+
}
|
77
|
+
|
78
|
+
static rb_data_type_t data_type = {
|
79
|
+
"Groonga::Database",
|
80
|
+
{
|
81
|
+
rb_grn_database_mark,
|
82
|
+
rb_grn_database_free,
|
83
|
+
NULL,
|
84
|
+
},
|
85
|
+
&rb_grn_object_data_type,
|
86
|
+
NULL,
|
87
|
+
RUBY_TYPED_FREE_IMMEDIATELY
|
88
|
+
};
|
89
|
+
|
90
|
+
grn_obj *
|
91
|
+
rb_grn_database_from_ruby_object (VALUE object)
|
92
|
+
{
|
93
|
+
if (!RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cGrnDatabase))) {
|
94
|
+
rb_raise(rb_eTypeError, "not a Rroonga database");
|
95
|
+
}
|
96
|
+
|
97
|
+
return RVAL2GRNOBJECT(object, NULL);
|
98
|
+
}
|
99
|
+
|
100
|
+
VALUE
|
101
|
+
rb_grn_database_to_ruby_object (grn_ctx *context, grn_obj *database,
|
102
|
+
grn_bool owner)
|
103
|
+
{
|
104
|
+
return GRNOBJECT2RVAL(rb_cGrnDatabase, context, database, owner);
|
105
|
+
}
|
106
|
+
|
89
107
|
static VALUE
|
90
108
|
rb_grn_database_alloc (VALUE klass)
|
91
109
|
{
|
92
|
-
return
|
93
|
-
NULL);
|
110
|
+
return TypedData_Wrap_Struct(klass, &data_type, NULL);
|
94
111
|
}
|
95
112
|
|
96
113
|
static void
|
@@ -143,8 +160,7 @@ rb_grn_database_close (VALUE self)
|
|
143
160
|
static void
|
144
161
|
reset_floating_objects (VALUE rb_context)
|
145
162
|
{
|
146
|
-
RbGrnContext *rb_grn_context;
|
147
|
-
Data_Get_Struct(rb_context, RbGrnContext, rb_grn_context);
|
163
|
+
RbGrnContext *rb_grn_context = rb_grn_context_get_struct(rb_context);
|
148
164
|
rb_grn_context_reset_floating_objects(rb_grn_context);
|
149
165
|
}
|
150
166
|
|
@@ -189,8 +205,10 @@ rb_grn_database_s_create (int argc, VALUE *argv, VALUE klass)
|
|
189
205
|
"builtin_type_names", &builtin_type_names,
|
190
206
|
NULL);
|
191
207
|
|
192
|
-
if (!NIL_P(rb_path))
|
208
|
+
if (!NIL_P(rb_path)) {
|
209
|
+
FilePathValue(rb_path);
|
193
210
|
path = StringValuePtr(rb_path);
|
211
|
+
}
|
194
212
|
context = rb_grn_context_ensure(&rb_context);
|
195
213
|
|
196
214
|
create_args.builtin_type_names = NULL;
|
@@ -245,6 +263,7 @@ rb_grn_database_initialize (int argc, VALUE *argv, VALUE self)
|
|
245
263
|
|
246
264
|
rb_scan_args(argc, argv, "11", &rb_path, &options);
|
247
265
|
|
266
|
+
FilePathValue(rb_path);
|
248
267
|
path = StringValuePtr(rb_path);
|
249
268
|
rb_grn_scan_options(options,
|
250
269
|
"context", &rb_context,
|