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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/Rakefile +26 -135
  4. data/doc/text/news.md +79 -1
  5. data/doc/text/tutorial.md +1 -1
  6. data/ext/groonga/extconf.rb +19 -74
  7. data/ext/groonga/rb-grn-accessor.c +2 -2
  8. data/ext/groonga/rb-grn-column-cache.c +3 -3
  9. data/ext/groonga/rb-grn-column.c +4 -4
  10. data/ext/groonga/rb-grn-context.c +109 -58
  11. data/ext/groonga/rb-grn-data-column.c +4 -4
  12. data/ext/groonga/rb-grn-database.c +45 -26
  13. data/ext/groonga/rb-grn-double-array-trie.c +2 -2
  14. data/ext/groonga/rb-grn-encoding-support.c +2 -2
  15. data/ext/groonga/rb-grn-exception.c +14 -0
  16. data/ext/groonga/rb-grn-expression-builder.c +3 -3
  17. data/ext/groonga/rb-grn-expression.c +3 -3
  18. data/ext/groonga/rb-grn-fix-size-column.c +2 -2
  19. data/ext/groonga/rb-grn-flushable.c +9 -1
  20. data/ext/groonga/rb-grn-hash.c +2 -2
  21. data/ext/groonga/rb-grn-index-column.c +30 -2
  22. data/ext/groonga/rb-grn-index-cursor.c +21 -2
  23. data/ext/groonga/rb-grn-inverted-index-cursor.c +3 -3
  24. data/ext/groonga/rb-grn-logger.c +17 -3
  25. data/ext/groonga/rb-grn-object.c +266 -31
  26. data/ext/groonga/rb-grn-operator.c +100 -259
  27. data/ext/groonga/rb-grn-patricia-trie.c +2 -2
  28. data/ext/groonga/rb-grn-plugin.c +34 -22
  29. data/ext/groonga/rb-grn-request-timer-id.c +2 -2
  30. data/ext/groonga/rb-grn-snippet.c +3 -3
  31. data/ext/groonga/rb-grn-table-cursor-key-support.c +2 -2
  32. data/ext/groonga/rb-grn-table-cursor.c +3 -3
  33. data/ext/groonga/rb-grn-table-key-support.c +28 -9
  34. data/ext/groonga/rb-grn-table.c +180 -130
  35. data/ext/groonga/rb-grn-type.c +5 -1
  36. data/ext/groonga/rb-grn-utils.c +17 -1
  37. data/ext/groonga/rb-grn-variable-size-column.c +2 -2
  38. data/ext/groonga/rb-grn-variable.c +2 -2
  39. data/ext/groonga/rb-grn.h +11 -14
  40. data/ext/groonga/rb-groonga.c +6 -2
  41. data/lib/groonga.rb +3 -7
  42. data/lib/groonga/context.rb +32 -0
  43. data/lib/groonga/dumper.rb +3 -0
  44. data/lib/groonga/record.rb +2 -2
  45. data/rroonga-build.rb +5 -4
  46. data/rroonga.gemspec +8 -6
  47. data/test/groonga-test-utils.rb +37 -5
  48. data/test/run-test.rb +1 -3
  49. data/test/test-accessor.rb +63 -7
  50. data/test/test-column.rb +12 -1
  51. data/test/test-context.rb +25 -0
  52. data/test/test-exception.rb +5 -0
  53. data/test/test-flushable.rb +51 -6
  54. data/test/test-index-column.rb +70 -9
  55. data/test/test-index-cursor.rb +26 -0
  56. data/test/test-logger.rb +56 -11
  57. data/test/test-plugin.rb +1 -0
  58. data/test/test-query-logger.rb +4 -3
  59. data/test/test-ractor.rb +65 -0
  60. data/test/test-record.rb +2 -1
  61. data/test/test-remote.rb +58 -10
  62. data/test/test-schema-dumper.rb +13 -0
  63. data/test/test-schema.rb +9 -1
  64. data/test/test-table-arrow.rb +22 -10
  65. data/test/test-table.rb +21 -1
  66. data/test/test-variable.rb +23 -7
  67. metadata +72 -97
@@ -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-2014 Kouhei Sutou <kou@clear-code.com>
4
+ Copyright (C) 2009-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) ((RbGrnTableKeySupport *)DATA_PTR(object))
22
+ #define SELF(object) ((RbGrnTableKeySupport *)RTYPEDDATA_DATA(object))
23
23
 
24
24
  VALUE rb_cGrnPatriciaTrie;
25
25
 
@@ -1,6 +1,6 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /*
3
- Copyright (C) 2011-2015 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2011-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,34 +17,19 @@
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) (RVAL2GRNCONTEXT(object))
23
-
24
- static VALUE cGrnPlugin;
25
-
26
20
  /*
27
21
  * Document-class: Groonga::Plugin
28
22
  *
29
- * プラグイン。現在のところ、Rubyでgroongaのプラグインを作成
23
+ * プラグイン。現在のところ、RubyでGroongaのプラグインを作成
30
24
  * することはできず、Cで作成された既存のプラグインを登録する
31
25
  * ことができるだけです。
32
26
  */
33
27
 
34
- grn_id
35
- rb_grn_plugin_from_ruby_object (VALUE object)
36
- {
37
- RbGrnPlugin *rb_grn_plugin;
28
+ #include "rb-grn.h"
38
29
 
39
- if (!RVAL2CBOOL(rb_obj_is_kind_of(object, cGrnPlugin))) {
40
- rb_raise(rb_eTypeError, "not a groonga plugin");
41
- }
30
+ #define SELF(object) (RVAL2GRNCONTEXT(object))
42
31
 
43
- Data_Get_Struct(object, RbGrnPlugin, rb_grn_plugin);
44
- if (!rb_grn_plugin)
45
- rb_raise(rb_eGrnError, "groonga plugin is NULL");
46
- return rb_grn_plugin->id;
47
- }
32
+ static VALUE cGrnPlugin;
48
33
 
49
34
  void
50
35
  rb_grn_plugin_fin (grn_id id)
@@ -59,10 +44,37 @@ rb_grn_plugin_free (void *pointer)
59
44
  xfree(rb_grn_plugin);
60
45
  }
61
46
 
47
+ static rb_data_type_t data_type = {
48
+ "Groonga::Plugin",
49
+ {
50
+ NULL,
51
+ rb_grn_plugin_free,
52
+ NULL,
53
+ },
54
+ NULL,
55
+ NULL,
56
+ RUBY_TYPED_FREE_IMMEDIATELY
57
+ };
58
+
59
+ grn_id
60
+ rb_grn_plugin_from_ruby_object (VALUE object)
61
+ {
62
+ RbGrnPlugin *rb_grn_plugin;
63
+
64
+ if (!RVAL2CBOOL(rb_obj_is_kind_of(object, cGrnPlugin))) {
65
+ rb_raise(rb_eTypeError, "not a groonga plugin");
66
+ }
67
+
68
+ TypedData_Get_Struct(object, RbGrnPlugin, &data_type, rb_grn_plugin);
69
+ if (!rb_grn_plugin)
70
+ rb_raise(rb_eGrnError, "groonga plugin is NULL");
71
+ return rb_grn_plugin->id;
72
+ }
73
+
62
74
  static VALUE
63
75
  rb_grn_plugin_alloc (VALUE klass)
64
76
  {
65
- return Data_Wrap_Struct(klass, NULL, rb_grn_plugin_free, NULL);
77
+ return TypedData_Wrap_Struct(klass, &data_type, NULL);
66
78
  }
67
79
 
68
80
  /*
@@ -245,7 +257,7 @@ rb_grn_plugin_s_names (int argc, VALUE *argv, VALUE klass)
245
257
  void
246
258
  rb_grn_init_plugin (VALUE mGrn)
247
259
  {
248
- cGrnPlugin = rb_define_class_under(mGrn, "Plugin", rb_cData);
260
+ cGrnPlugin = rb_define_class_under(mGrn, "Plugin", rb_cObject);
249
261
  rb_define_alloc_func(cGrnPlugin, rb_grn_plugin_alloc);
250
262
 
251
263
  rb_define_singleton_method(cGrnPlugin, "register",
@@ -1,6 +1,6 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /*
3
- Copyright (C) 2016 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2016-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
@@ -60,5 +60,5 @@ void
60
60
  rb_grn_init_request_timer_id (VALUE mGrn)
61
61
  {
62
62
  rb_cGrnRequestTimerID =
63
- rb_define_class_under(mGrn, "RequestTimerID", rb_cData);
63
+ rb_define_class_under(mGrn, "RequestTimerID", rb_cObject);
64
64
  }
@@ -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-2014 Kouhei Sutou <kou@clear-code.com>
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) ((RbGrnSnippet *)DATA_PTR(object))
21
+ #define SELF(object) ((RbGrnSnippet *)RTYPEDDATA_DATA(object))
22
22
 
23
23
  VALUE rb_cGrnSnippet;
24
24
 
@@ -149,7 +149,7 @@ rb_grn_snippet_initialize (int argc, VALUE *argv, VALUE self)
149
149
  rb_grn_context_check(context, rb_ary_new_from_values(argc, argv));
150
150
 
151
151
  rb_grn_object_assign(Qnil, self, rb_context, context, snippet);
152
- rb_grn_context_register_floating_object(DATA_PTR(self));
152
+ rb_grn_context_register_floating_object(RTYPEDDATA_DATA(self));
153
153
 
154
154
  rb_iv_set(self, "@context", rb_context);
155
155
 
@@ -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 Sutou <kou@clear-code.com>
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) ((RbGrnTableCursor *)DATA_PTR(object))
21
+ #define SELF(object) ((RbGrnTableCursor *)RTYPEDDATA_DATA(object))
22
22
 
23
23
  VALUE rb_mGrnTableCursorKeySupport;
24
24
 
@@ -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-2013 Kouhei Sutou <kou@clear-code.com>
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) ((RbGrnTableCursor *)DATA_PTR(object))
21
+ #define SELF(object) ((RbGrnTableCursor *)RTYPEDDATA_DATA(object))
22
22
 
23
23
  VALUE rb_cGrnTableCursor;
24
24
 
@@ -277,7 +277,7 @@ rb_grn_table_cursor_each (VALUE self)
277
277
  void
278
278
  rb_grn_init_table_cursor (VALUE mGrn)
279
279
  {
280
- rb_cGrnTableCursor = rb_define_class_under(mGrn, "TableCursor", rb_cData);
280
+ rb_cGrnTableCursor = rb_define_class_under(mGrn, "TableCursor", rb_cObject);
281
281
  rb_define_alloc_func(rb_cGrnTableCursor, rb_grn_object_alloc);
282
282
 
283
283
  rb_include_module(rb_cGrnTableCursor, rb_mEnumerable);
@@ -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-2014 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2009-2021 Sutou Kouhei <kou@clear-code.com>
4
4
  Copyright (C) 2014-2016 Masafumi Yokoyama <yokoyama@clear-code.com>
5
5
 
6
6
  This library is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
19
19
 
20
20
  #include "rb-grn.h"
21
21
 
22
- #define SELF(object) ((RbGrnTableKeySupport *)DATA_PTR(object))
22
+ #define SELF(object) ((RbGrnTableKeySupport *)RTYPEDDATA_DATA(object))
23
23
 
24
24
  VALUE rb_mGrnTableKeySupport;
25
25
 
@@ -481,8 +481,10 @@ typedef struct _SetValueData
481
481
  } SetValueData;
482
482
 
483
483
  static VALUE
484
- set_value (VALUE args, SetValueData *data)
484
+ set_value (RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg))
485
485
  {
486
+ VALUE args = yielded_arg;
487
+ SetValueData *data = (SetValueData *)callback_arg;
486
488
  VALUE rb_name, rb_value, rb_column;
487
489
  RbGrnObject *rb_grn_object;
488
490
 
@@ -496,7 +498,7 @@ set_value (VALUE args, SetValueData *data)
496
498
  rb_grn_inspect(rb_name), rb_grn_inspect(data->self));
497
499
  }
498
500
 
499
- rb_grn_object = RB_GRN_OBJECT(DATA_PTR(rb_column));
501
+ rb_grn_object = RB_GRN_OBJECT(RTYPEDDATA_DATA(rb_column));
500
502
  return rb_grn_object_set_raw(rb_grn_object,
501
503
  data->id, rb_value, GRN_OBJ_SET, data->self);
502
504
  }
@@ -911,7 +913,9 @@ rb_grn_table_key_support_get_normalizer (VALUE self)
911
913
  * # Specifies normalizer object.
912
914
  * table.normalizer = Groonga::Context["NormalizerNFKC51"]
913
915
  * # Uses auto normalizer that is a normalizer for backward compatibility.
914
- * table.normalizer = "TNormalizerAuto"
916
+ * table.normalizer = "NormalizerAuto"
917
+ * # Uses a normalizer with options.
918
+ * table.normalizer = "NormalizerNFKC121('unify_kana', true)"
915
919
  *
916
920
  * @overload normalizer=(name)
917
921
  * @param [String] name Set a nomalizer named @name@.
@@ -927,7 +931,6 @@ rb_grn_table_key_support_set_normalizer (VALUE self, VALUE rb_normalizer)
927
931
  {
928
932
  grn_ctx *context;
929
933
  grn_obj *table;
930
- grn_obj *normalizer;
931
934
  grn_rc rc;
932
935
 
933
936
  rb_grn_table_key_support_deconstruct(SELF(self), &table, &context,
@@ -935,9 +938,25 @@ rb_grn_table_key_support_set_normalizer (VALUE self, VALUE rb_normalizer)
935
938
  NULL, NULL, NULL,
936
939
  NULL);
937
940
 
938
- normalizer = RVAL2GRNOBJECT(rb_normalizer, &context);
939
- rc = grn_obj_set_info(context, table, GRN_INFO_NORMALIZER, normalizer);
940
- rb_grn_context_check(context, self);
941
+ if (RB_TYPE_P(rb_normalizer, RUBY_T_STRING)) {
942
+ grn_obj normalizer;
943
+ VALUE exception;
944
+ GRN_TEXT_INIT(&normalizer, GRN_OBJ_DO_SHALLOW_COPY);
945
+ GRN_TEXT_SET(context,
946
+ &normalizer,
947
+ RSTRING_PTR(rb_normalizer),
948
+ RSTRING_LEN(rb_normalizer));
949
+ rc = grn_obj_set_info(context, table, GRN_INFO_NORMALIZER, &normalizer);
950
+ exception = rb_grn_context_to_exception(context, self);
951
+ GRN_OBJ_FIN(context, &normalizer);
952
+ if (!NIL_P(exception)) {
953
+ rb_exc_raise(exception);
954
+ }
955
+ } else {
956
+ grn_obj *normalizer = RVAL2GRNOBJECT(rb_normalizer, &context);
957
+ rc = grn_obj_set_info(context, table, GRN_INFO_NORMALIZER, normalizer);
958
+ rb_grn_context_check(context, self);
959
+ }
941
960
  rb_grn_rc_check(rc, self);
942
961
 
943
962
  return Qnil;
@@ -1,7 +1,8 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /*
3
- Copyright (C) 2009-2017 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2009-2021 Sutou Kouhei <kou@clear-code.com>
4
4
  Copyright (C) 2014-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
@@ -19,20 +20,66 @@
19
20
 
20
21
  #include "rb-grn.h"
21
22
 
22
- #define SELF(object) ((RbGrnTable *)DATA_PTR(object))
23
+ /*
24
+ * Document-class: Groonga::Table < Groonga::Object
25
+ *
26
+ * This class is base class which represents Rroonga's table.
27
+ * {Groonga::Array} , {Groonga::Hash} , {Groonga::PatriciaTrie}
28
+ * are extended from this class.
29
+ */
30
+
31
+ #define SELF(object) ((RbGrnTable *)RTYPEDDATA_DATA(object))
23
32
 
24
33
  VALUE rb_cGrnTable;
25
34
 
26
35
  static ID id_array_reference;
27
36
  static ID id_array_set;
28
37
 
29
- /*
30
- * Document-class: Groonga::Table < Groonga::Object
31
- *
32
- * Rroongaが提供するテーブルのベースとなるクラス。このクラス
33
- * から {Groonga::Array} , {Groonga::Hash} , {Groonga::PatriciaTrie}
34
- * が継承されている。
35
- */
38
+ static void
39
+ rb_grn_table_mark (void *data)
40
+ {
41
+ RbGrnObject *rb_grn_object = data;
42
+ RbGrnTable *rb_grn_table = data;
43
+ grn_ctx *context;
44
+ grn_obj *table;
45
+
46
+ if (!rb_grn_object)
47
+ return;
48
+
49
+ rb_gc_mark(rb_grn_table->columns);
50
+
51
+ context = rb_grn_object->context;
52
+ table = rb_grn_object->object;
53
+ if (!context || !table)
54
+ return;
55
+
56
+ rb_grn_context_mark_grn_id(context, table->header.domain);
57
+ rb_grn_context_mark_grn_id(context, grn_obj_get_range(context, table));
58
+
59
+ if (!grn_obj_path(context, table))
60
+ return;
61
+
62
+ if (grn_obj_name(context, table, NULL, 0) == 0)
63
+ return;
64
+ }
65
+
66
+ static void
67
+ rb_grn_table_free (void *pointer)
68
+ {
69
+ rb_grn_object_free(pointer);
70
+ }
71
+
72
+ static rb_data_type_t data_type = {
73
+ "Groonga::Table",
74
+ {
75
+ rb_grn_table_mark,
76
+ rb_grn_table_free,
77
+ NULL,
78
+ },
79
+ &rb_grn_object_data_type,
80
+ NULL,
81
+ RUBY_TYPED_FREE_IMMEDIATELY
82
+ };
36
83
 
37
84
  grn_obj *
38
85
  rb_grn_table_from_ruby_object (VALUE object, grn_ctx **context)
@@ -100,38 +147,10 @@ rb_grn_table_deconstruct (RbGrnTable *rb_grn_table,
100
147
  *columns = rb_grn_table->columns;
101
148
  }
102
149
 
103
- static void
104
- rb_grn_table_mark (void *data)
105
- {
106
- RbGrnObject *rb_grn_object = data;
107
- RbGrnTable *rb_grn_table = data;
108
- grn_ctx *context;
109
- grn_obj *table;
110
-
111
- if (!rb_grn_object)
112
- return;
113
-
114
- rb_gc_mark(rb_grn_table->columns);
115
-
116
- context = rb_grn_object->context;
117
- table = rb_grn_object->object;
118
- if (!context || !table)
119
- return;
120
-
121
- rb_grn_context_mark_grn_id(context, table->header.domain);
122
- rb_grn_context_mark_grn_id(context, grn_obj_get_range(context, table));
123
-
124
- if (!grn_obj_path(context, table))
125
- return;
126
-
127
- if (grn_obj_name(context, table, NULL, 0) == 0)
128
- return;
129
- }
130
-
131
150
  static VALUE
132
151
  rb_grn_table_alloc (VALUE klass)
133
152
  {
134
- return Data_Wrap_Struct(klass, rb_grn_table_mark, rb_grn_object_free, NULL);
153
+ return TypedData_Wrap_Struct(klass, &data_type, NULL);
135
154
  }
136
155
 
137
156
  static VALUE
@@ -183,7 +202,8 @@ rb_grn_table_inspect_content (VALUE self, VALUE inspected)
183
202
  }
184
203
 
185
204
  /*
186
- * テーブルの中身を人に見やすい文字列で返す。
205
+ * This function return contents of a table as a string.
206
+ * It's easy to understand for human.
187
207
  *
188
208
  * @overload inspect
189
209
  * @return [String]
@@ -203,31 +223,33 @@ rb_grn_table_inspect (VALUE self)
203
223
  }
204
224
 
205
225
  /*
206
- * テーブルに名前が _name_ で型が _value_type_ のカラムを定義
207
- * し、新しく定義されたカラムを返す。
226
+ * Defines a column that name is `name` and type is `value_type`. It
227
+ * returns the newly defined column.
208
228
  *
209
229
  * @overload define_column(name, value_type, options={})
210
230
  * @param options [::Hash] The name and value
211
231
  * pairs. Omitted names are initialized as the default value.
212
- * @option options :path
213
- * カラムを保存するパス。
214
- * @option options :persistent (永続カラム)
215
- * +true+ を指定すると永続カラムとなる。省略した場合は永
216
- * 続カラムとなる。 +:path+ を省略した場合は自動的にパスが
217
- * 付加される。
232
+ * @option options :path [String, nil] (nil)
233
+ * The path to store the content of the column.
234
+ * If this is omitted, path is generated automatically.
235
+ * @option options :persistent [Boolean] (true)
236
+ * Whether the column is a persistent column or not.
237
+ * If this is `true` and `:path` is omitted, path is generated
238
+ * automatically.
218
239
  * @option options :type (:scalar)
219
- * カラムの値の格納方法について指定する。省略した場合は、
220
- * +:scalar+ になる。
240
+ * This option specifies how to store a value of a column.
241
+ * If this option is omitted, +:scalar+ is used.
221
242
  *
222
- * - +:scalar+ := スカラ値(単独の値)を格納する。
223
- * - +:vector+ := 値の配列を格納する。
243
+ * - +:scalar+ := Store scalar value.
244
+ * - +:vector+ := Store array value.
224
245
  * @option options [Boolean] :with_weight (false)
225
246
  * It specifies whether making the column weight vector column or not.
226
247
  * Weight vector column can store weight for each element.
227
248
  *
228
249
  * You can't use this option for scalar column.
229
250
  * @option options :compress
230
- * 値の圧縮方法を指定する。省略した場合は、圧縮しない。
251
+ * This option specifies how to compress values.
252
+ * If we omit this option, values are not compressed.
231
253
  *
232
254
  * * `:zlib`: Compressed by zlib.
233
255
  * * `:lz4`: Compressed by LZ4.
@@ -338,39 +360,44 @@ rb_grn_table_define_column (int argc, VALUE *argv, VALUE self)
338
360
 
339
361
  rb_column = GRNCOLUMN2RVAL(Qnil, context, column, GRN_TRUE);
340
362
  rb_ary_push(columns, rb_column);
341
- rb_grn_named_object_set_name(RB_GRN_NAMED_OBJECT(DATA_PTR(rb_column)),
363
+ rb_grn_named_object_set_name(RB_GRN_NAMED_OBJECT(RTYPEDDATA_DATA(rb_column)),
342
364
  name, name_size);
343
365
 
344
366
  return rb_column;
345
367
  }
346
368
 
347
369
  /*
348
- * テーブルに名前が _name_ で型が _value_type_ のインデックスカ
349
- * ラムを定義し、新しく定義されたカラムを返す。
370
+ * Defines an index column that name is `name` and type is
371
+ * `value_type`. It returns the newly defined index column.
350
372
  *
351
373
  * @overload define_index_column(name, value_type, options={})
352
374
  * @param options [::Hash] The name and value
353
375
  * pairs. Omitted names are initialized as the default value.
354
- * @option options :path
355
- * カラムを保存するパス。
356
- * @option options :persistent (永続カラム)
357
- * +true+ を指定すると永続カラムとなる。省略した場合は永
358
- * 続カラムとなる。 +:path+ を省略した場合は自動的にパスが
359
- * 付加される。
360
- * @option options :with_section
361
- * 転置索引にsection(段落情報)を合わせて格納する。
362
- * @option options :with_weight
363
- * 転置索引にweight情報を合わせて格納する。
364
- * @option options :with_position
365
- * 転置索引に出現位置情報を合わせて格納する。
366
- * @option options :size (nil)
367
- * The size of index column. It must be `nil`, `:small` or
368
- * `:medium`. `nil` means full size. `:small` means small
369
- * size. `:medium` means medium size.
370
- * @option options :source
371
- * インデックス対象となるカラムを指定する。 +:sources+ との併用はできない。
372
- * @option options :sources
373
- * インデックス対象となる複数のカラムを指定する。 +:source+ との併用はできない。
376
+ * @option options :path [String, nil] (nil)
377
+ * The path to store the content of the index column.
378
+ * If this is omitted, path is generated automatically.
379
+ * @option options :persistent [Boolean] (true)
380
+ * Whether the index column is a persistent indent column or not.
381
+ * If this is `true` and `:path` is omitted, path is generated
382
+ * automatically.
383
+ * @option options :with_section [Boolean] (false)
384
+ * Whether section information is stored to the index column or not.
385
+ * @option options :with_weight [Boolean] (false)
386
+ * Whether weight information is stored to the index column or not.
387
+ * @option options :with_position [Boolean] (false)
388
+ * Whether position information is stored to the index column or not.
389
+ * @option options :size [Symbol, nil] (nil)
390
+ * The size of index column. It must be `nil`, `:small`,
391
+ * `:medium` or `:large`. `nil` means the default size.
392
+ * `:small` means small size. `:medium` means medium size. Medium size
393
+ * is smaller than the default size. `:large` means large size.
394
+ * Large size is larger than the default size.
395
+ * @option options :source [Groonga::Column, nil] (nil)
396
+ * Specifies the source column of the index column.
397
+ * This option can't be used with `:sources`.
398
+ * @option options :sources [::Array<Groonga::Column>, nil] (nil)
399
+ * Specifies the source columns of the index column.
400
+ * This option can't be used with `:source`.
374
401
  *
375
402
  * @return [Groonga::IndexColumn]
376
403
  */
@@ -461,9 +488,11 @@ rb_grn_table_define_index_column (int argc, VALUE *argv, VALUE self)
461
488
  flags |= GRN_OBJ_INDEX_SMALL;
462
489
  } else if (rb_grn_equal_option(rb_size, "medium")) {
463
490
  flags |= GRN_OBJ_INDEX_MEDIUM;
491
+ } else if (rb_grn_equal_option(rb_size, "large")) {
492
+ flags |= GRN_OBJ_INDEX_LARGE;
464
493
  } else {
465
494
  rb_raise(rb_eArgError,
466
- ":size must be nil, :small or :medium: <%" PRIsVALUE ">",
495
+ ":size must be nil, :small, :medium or :large: <%" PRIsVALUE ">",
467
496
  rb_size);
468
497
  }
469
498
 
@@ -486,7 +515,7 @@ rb_grn_table_define_index_column (int argc, VALUE *argv, VALUE self)
486
515
  rb_funcall(rb_column, rb_intern("sources="), 1, rb_sources);
487
516
 
488
517
  rb_ary_push(columns, rb_column);
489
- rb_grn_named_object_set_name(RB_GRN_NAMED_OBJECT(DATA_PTR(rb_column)),
518
+ rb_grn_named_object_set_name(RB_GRN_NAMED_OBJECT(RTYPEDDATA_DATA(rb_column)),
490
519
  name, name_size);
491
520
 
492
521
  return rb_column;
@@ -514,8 +543,8 @@ ruby_object_to_column_name (VALUE rb_name,
514
543
  }
515
544
 
516
545
  /*
517
- * テーブルの _name_ に対応するカラムを返す。カラムが存在しな
518
- * い場合は +nil+ を返す。
546
+ * It returns the column has the specified name.
547
+ * If the specified column does not exist, it returns `nil`.
519
548
  *
520
549
  * @overload column(name)
521
550
  * @return [Groonga::Column, nil]
@@ -547,7 +576,7 @@ rb_grn_table_get_column (VALUE self, VALUE rb_name)
547
576
  VALUE rb_column = raw_columns[i];
548
577
  RbGrnNamedObject *rb_grn_named_object;
549
578
 
550
- rb_grn_named_object = RB_GRN_NAMED_OBJECT(DATA_PTR(rb_column));
579
+ rb_grn_named_object = RB_GRN_NAMED_OBJECT(RTYPEDDATA_DATA(rb_column));
551
580
  if (name_size == rb_grn_named_object->name_size &&
552
581
  memcmp(name, rb_grn_named_object->name, name_size) == 0) {
553
582
  return rb_column;
@@ -572,9 +601,9 @@ rb_grn_table_get_column (VALUE self, VALUE rb_name)
572
601
  owner = column->header.type == GRN_ACCESSOR;
573
602
  rb_column = GRNCOLUMN2RVAL(Qnil, context, column, owner);
574
603
  if (owner) {
575
- rb_grn_context_register_floating_object(DATA_PTR(rb_column));
604
+ rb_grn_context_register_floating_object(RTYPEDDATA_DATA(rb_column));
576
605
  }
577
- rb_grn_named_object_set_name(RB_GRN_NAMED_OBJECT(DATA_PTR(rb_column)),
606
+ rb_grn_named_object_set_name(RB_GRN_NAMED_OBJECT(RTYPEDDATA_DATA(rb_column)),
578
607
  name, name_size);
579
608
 
580
609
  return rb_column;
@@ -595,11 +624,15 @@ rb_grn_table_get_column_surely (VALUE self, VALUE rb_name)
595
624
  }
596
625
 
597
626
  /*
598
- * テーブルの全てのカラムを返す。 _name_ が指定された場合はカ
599
- * ラム名の先頭が _name_ で始まるカラムを返す。
627
+ * @overload columns(prefix=nil)
628
+ * It returns the specified columns in the table.
629
+ *
630
+ * @param prefix [String, nil]
631
+ * If this is `nil`, it returns the all columns in table.
632
+ *
633
+ * Otherwise it returns columns which have name starts with `prefix`.
600
634
  *
601
- * @overload columns(name=nil)
602
- * @return [Groonga::Columnの配列]
635
+ * @return [::Array<Groonga::Column>]
603
636
  */
604
637
  static VALUE
605
638
  rb_grn_table_get_columns (int argc, VALUE *argv, VALUE self)
@@ -611,9 +644,9 @@ rb_grn_table_get_columns (int argc, VALUE *argv, VALUE self)
611
644
  grn_rc rc;
612
645
  int n;
613
646
  grn_table_cursor *cursor;
614
- VALUE rb_name, rb_columns;
615
- char *name = NULL;
616
- unsigned name_size = 0;
647
+ VALUE rb_prefix, rb_columns;
648
+ char *prefix = NULL;
649
+ unsigned prefix_size = 0;
617
650
  VALUE exception;
618
651
 
619
652
  rb_grn_table_deconstruct(SELF(self), &table, &context,
@@ -621,18 +654,18 @@ rb_grn_table_get_columns (int argc, VALUE *argv, VALUE self)
621
654
  NULL, NULL, NULL,
622
655
  NULL);
623
656
 
624
- rb_scan_args(argc, argv, "01", &rb_name);
657
+ rb_scan_args(argc, argv, "01", &rb_prefix);
625
658
 
626
- if (!NIL_P(rb_name)) {
627
- name = StringValuePtr(rb_name);
628
- name_size = RSTRING_LEN(rb_name);
659
+ if (!NIL_P(rb_prefix)) {
660
+ prefix = StringValuePtr(rb_prefix);
661
+ prefix_size = RSTRING_LEN(rb_prefix);
629
662
  }
630
663
 
631
664
  key_type = grn_ctx_at(context, GRN_DB_SHORT_TEXT);
632
665
  columns = grn_table_create(context, NULL, 0, NULL, GRN_TABLE_HASH_KEY,
633
666
  key_type, 0);
634
667
  rb_grn_context_check(context, self);
635
- n = grn_table_columns(context, table, name, name_size, columns);
668
+ n = grn_table_columns(context, table, prefix, prefix_size, columns);
636
669
  rb_grn_context_check(context, self);
637
670
 
638
671
  rb_columns = rb_ary_new2(n);
@@ -673,7 +706,7 @@ rb_grn_table_get_columns (int argc, VALUE *argv, VALUE self)
673
706
  RbGrnNamedObject *rb_grn_named_object;
674
707
  name_size = grn_column_name(context, column,
675
708
  name, GRN_TABLE_MAX_KEY_SIZE);
676
- rb_grn_named_object = RB_GRN_NAMED_OBJECT(DATA_PTR(rb_column));
709
+ rb_grn_named_object = RB_GRN_NAMED_OBJECT(RTYPEDDATA_DATA(rb_column));
677
710
  rb_grn_named_object_set_name(rb_grn_named_object, name, name_size);
678
711
  }
679
712
 
@@ -690,9 +723,10 @@ rb_grn_table_get_columns (int argc, VALUE *argv, VALUE self)
690
723
  }
691
724
 
692
725
  /*
693
- * テーブルが _name_ カラムを持っている場合は +true+ を返す。
726
+ * Checks whether the table has a specified column or not.
694
727
  *
695
728
  * @overload have_column?(name)
729
+ * @return [Boolean] `true` if the table has a `name` column, `false` otherwise.
696
730
  */
697
731
  static VALUE
698
732
  rb_grn_table_have_column (VALUE self, VALUE rb_name)
@@ -873,11 +907,10 @@ rb_grn_table_open_cursor (int argc, VALUE *argv, VALUE self)
873
907
  }
874
908
 
875
909
  /*
876
- * テーブルに登録されている全てのレコードが入っている配列を
877
- * 返す。
878
- *
879
910
  * @overload records
880
- * @return [Groonga::Recordの配列]
911
+ * It returns all records in the table.
912
+ *
913
+ * @return [::Array<Groonga::Record>]
881
914
  */
882
915
  static VALUE
883
916
  rb_grn_table_get_records (int argc, VALUE *argv, VALUE self)
@@ -898,9 +931,9 @@ rb_grn_table_get_records (int argc, VALUE *argv, VALUE self)
898
931
  }
899
932
 
900
933
  /*
901
- * テーブルに登録されているレコード数を返す。
902
- *
903
934
  * @overload size
935
+ * It returns the number of records in the table.
936
+ *
904
937
  * @return [Integer]
905
938
  */
906
939
  static VALUE
@@ -919,9 +952,10 @@ rb_grn_table_get_size (VALUE self)
919
952
  }
920
953
 
921
954
  /*
922
- * テーブルにレコードが登録されていなければ +true+ を返す。
923
- *
924
955
  * @overload empty?
956
+ *
957
+ * @return [Boolean] `true` if the table has no records,
958
+ * `false` otherwise.
925
959
  */
926
960
  static VALUE
927
961
  rb_grn_table_empty_p (VALUE self)
@@ -939,9 +973,11 @@ rb_grn_table_empty_p (VALUE self)
939
973
  }
940
974
 
941
975
  /*
942
- * テーブルの全レコードを一括して削除する。
976
+ * Deletes all records in the table at once.
943
977
  *
944
978
  * @overload truncate
979
+ *
980
+ * @return [void]
945
981
  */
946
982
  static VALUE
947
983
  rb_grn_table_truncate (VALUE self)
@@ -1074,7 +1110,7 @@ rb_grn_table_delete_by_expression (VALUE self)
1074
1110
 
1075
1111
  rb_builder = rb_grn_record_expression_builder_new(self, Qnil);
1076
1112
  rb_expression = rb_grn_record_expression_builder_build(rb_builder);
1077
- rb_grn_object_deconstruct(RB_GRN_OBJECT(DATA_PTR(rb_expression)),
1113
+ rb_grn_object_deconstruct(RB_GRN_OBJECT(RTYPEDDATA_DATA(rb_expression)),
1078
1114
  &expression, NULL,
1079
1115
  NULL, NULL, NULL, NULL);
1080
1116
 
@@ -1112,7 +1148,7 @@ rb_grn_table_delete_by_expression (VALUE self)
1112
1148
  *
1113
1149
  * @param id [Integer] The ID of delete target record.
1114
1150
  *
1115
- * @return void
1151
+ * @return [void]
1116
1152
  *
1117
1153
  * @overload delete
1118
1154
  * Delete records that are matched with the given condition
@@ -1130,7 +1166,7 @@ rb_grn_table_delete_by_expression (VALUE self)
1130
1166
  * @yieldreturn [Groonga::ExpressionBuilder]
1131
1167
  * TODO: See #select.
1132
1168
  *
1133
- * @return void
1169
+ * @return [void]
1134
1170
  */
1135
1171
  static VALUE
1136
1172
  rb_grn_table_delete (int argc, VALUE *argv, VALUE self)
@@ -1613,9 +1649,10 @@ rb_grn_table_each_sub_record (VALUE self, VALUE rb_id)
1613
1649
  }
1614
1650
 
1615
1651
  /*
1616
- * _table_ _id_ に対応する {Groonga::Record} を返す。
1652
+ * It returns the {Groonga::Record} for the `id` in the `table`.
1617
1653
  *
1618
- * 0.9.0から値ではなく {Groonga::Record} を返すようになった。
1654
+ * The return value has been changed to {Groonga::Record} from `id`
1655
+ * itself since 0.9.0.
1619
1656
  *
1620
1657
  * @overload [](id)
1621
1658
  * @return [Groonga::Record]
@@ -1653,16 +1690,16 @@ rb_grn_table_get_value (VALUE self, VALUE rb_id)
1653
1690
  }
1654
1691
 
1655
1692
  /*
1656
- * _table_ _id_ に対応する値を返す。
1693
+ * It returns the value for the `id` in the `table`.
1657
1694
  *
1658
- * @:id => true@ が指定できるのは利便性のため。
1659
- * {Groonga::Array} でも {Groonga::Hash} や {Groonga::PatriciaTrie} と
1660
- * 同じ引数で動くようになる。
1695
+ * You can specify `id: true` for the convenience. `id: true` works
1696
+ * with {Groonga::Array} like for {Groonga::Hash},
1697
+ * {Groonga::PatriciaTrie} and so on.
1661
1698
  *
1662
1699
  * @overload value(id)
1663
- * @return []
1664
- * @overload value(id, :id => true)
1665
- * @return []
1700
+ * @return [value]
1701
+ * @overload value(id, id: true)
1702
+ * @return [value]
1666
1703
  */
1667
1704
  static VALUE
1668
1705
  rb_grn_table_get_value_convenience (int argc, VALUE *argv, VALUE self)
@@ -2375,7 +2412,7 @@ rb_grn_table_select (int argc, VALUE *argv, VALUE self)
2375
2412
  rb_funcall(builder, rb_intern("default_column="), 1, rb_default_column);
2376
2413
  rb_expression = rb_grn_record_expression_builder_build(builder);
2377
2414
  }
2378
- rb_grn_object_deconstruct(RB_GRN_OBJECT(DATA_PTR(rb_expression)),
2415
+ rb_grn_object_deconstruct(RB_GRN_OBJECT(RTYPEDDATA_DATA(rb_expression)),
2379
2416
  &expression, NULL,
2380
2417
  NULL, NULL, NULL, NULL);
2381
2418
 
@@ -2482,8 +2519,8 @@ rb_grn_table_support_key_p (VALUE self)
2482
2519
  /*
2483
2520
  * @overload support_value?
2484
2521
  *
2485
- * @return @true@ if the table is created with value type, @false@
2486
- * otherwise.
2522
+ * @return [Boolean] `true` if the table is created with value type,
2523
+ * `false` otherwise.
2487
2524
  */
2488
2525
  static VALUE
2489
2526
  rb_grn_table_support_value_p (VALUE self)
@@ -2498,11 +2535,11 @@ rb_grn_table_support_value_p (VALUE self)
2498
2535
  }
2499
2536
 
2500
2537
  /*
2501
- * グループ化したとき、テーブルにグループに含まれるレコード
2502
- * 数を格納できる場合は +true+ 、格納できない場合は +false+ を返
2503
- * す。
2504
- *
2505
2538
  * @overload support_sub_records?
2539
+ *
2540
+ * @return [Boolean] `true` if the table can store the number of
2541
+ * records for each group when the table is grouped, `false`
2542
+ * otherwise.
2506
2543
  */
2507
2544
  static VALUE
2508
2545
  rb_grn_table_support_sub_records_p (VALUE self)
@@ -2517,6 +2554,19 @@ rb_grn_table_support_sub_records_p (VALUE self)
2517
2554
  return CBOOL2RVAL(grn_table_is_grouped(context, table));
2518
2555
  }
2519
2556
 
2557
+ /*
2558
+ * @overload support_score?
2559
+ *
2560
+ * @return [Boolean] `true` if the table has `_score` column,
2561
+ * `false` otherwise.
2562
+ */
2563
+ static VALUE
2564
+ rb_grn_table_support_score_p (VALUE self)
2565
+ {
2566
+ return CBOOL2RVAL(rb_grn_table_have_column(self,
2567
+ rb_str_new_literal("_score")));
2568
+ }
2569
+
2520
2570
  /*
2521
2571
  * {Groonga::Table#group} returns a table that contains grouped
2522
2572
  * records. If grouped table has a space to store the number of
@@ -2554,13 +2604,11 @@ rb_grn_table_have_n_sub_records_space_p (VALUE self)
2554
2604
  }
2555
2605
 
2556
2606
  /*
2557
- * _table_ に _id_ で指定したIDのレコードが存在する場合は +true+ 、
2558
- * 存在しない場合は +false+ を返す。
2559
- *
2560
- * 注意: 実行には相応のコストがかかるのであまり頻繁に呼ばな
2561
- * いようにして下さい。
2562
- *
2563
2607
  * @overload exist?(id)
2608
+ * @return [Boolean] `true` if the table has a record specified ID
2609
+ * by `id`, `false` otherwise.
2610
+ *
2611
+ * @note This method is heavy. You should not call this as much as possible.
2564
2612
  */
2565
2613
  static VALUE
2566
2614
  rb_grn_table_exist_p (VALUE self, VALUE id)
@@ -2890,6 +2938,8 @@ rb_grn_init_table (VALUE mGrn)
2890
2938
  rb_grn_table_support_value_p, 0);
2891
2939
  rb_define_method(rb_cGrnTable, "support_sub_records?",
2892
2940
  rb_grn_table_support_sub_records_p, 0);
2941
+ rb_define_method(rb_cGrnTable, "support_score?",
2942
+ rb_grn_table_support_score_p, 0);
2893
2943
  rb_define_method(rb_cGrnTable, "have_n_sub_records_space?",
2894
2944
  rb_grn_table_have_n_sub_records_space_p, 0);
2895
2945