rroonga 9.0.3 → 11.0.0

Sign up to get free protection for your applications and to get access to all the features.
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