groonga 0.9.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (186) hide show
  1. metadata +38 -227
  2. data/AUTHORS +0 -5
  3. data/NEWS.ja.rdoc +0 -114
  4. data/NEWS.rdoc +0 -116
  5. data/README.ja.rdoc +0 -63
  6. data/README.rdoc +0 -64
  7. data/Rakefile +0 -216
  8. data/benchmark/common.rb +0 -49
  9. data/benchmark/read-write-many-small-items.rb +0 -144
  10. data/benchmark/write-many-small-items.rb +0 -135
  11. data/example/bookmark.rb +0 -161
  12. data/example/index-html.rb +0 -89
  13. data/example/search/config.ru +0 -211
  14. data/example/search/public/css/groonga.css +0 -122
  15. data/ext/.gitignore +0 -2
  16. data/ext/rb-grn-accessor.c +0 -52
  17. data/ext/rb-grn-array-cursor.c +0 -36
  18. data/ext/rb-grn-array.c +0 -210
  19. data/ext/rb-grn-column.c +0 -570
  20. data/ext/rb-grn-context.c +0 -655
  21. data/ext/rb-grn-database.c +0 -415
  22. data/ext/rb-grn-encoding-support.c +0 -64
  23. data/ext/rb-grn-encoding.c +0 -257
  24. data/ext/rb-grn-exception.c +0 -1110
  25. data/ext/rb-grn-expression-builder.c +0 -75
  26. data/ext/rb-grn-expression.c +0 -732
  27. data/ext/rb-grn-fix-size-column.c +0 -166
  28. data/ext/rb-grn-hash-cursor.c +0 -38
  29. data/ext/rb-grn-hash.c +0 -294
  30. data/ext/rb-grn-index-column.c +0 -488
  31. data/ext/rb-grn-logger.c +0 -325
  32. data/ext/rb-grn-object.c +0 -1335
  33. data/ext/rb-grn-operation.c +0 -198
  34. data/ext/rb-grn-patricia-trie-cursor.c +0 -39
  35. data/ext/rb-grn-patricia-trie.c +0 -488
  36. data/ext/rb-grn-procedure.c +0 -52
  37. data/ext/rb-grn-query.c +0 -260
  38. data/ext/rb-grn-record.c +0 -40
  39. data/ext/rb-grn-snippet.c +0 -328
  40. data/ext/rb-grn-table-cursor-key-support.c +0 -69
  41. data/ext/rb-grn-table-cursor.c +0 -246
  42. data/ext/rb-grn-table-key-support.c +0 -731
  43. data/ext/rb-grn-table.c +0 -2038
  44. data/ext/rb-grn-type.c +0 -181
  45. data/ext/rb-grn-utils.c +0 -769
  46. data/ext/rb-grn-variable-size-column.c +0 -36
  47. data/ext/rb-grn-variable.c +0 -108
  48. data/ext/rb-grn.h +0 -684
  49. data/ext/rb-groonga.c +0 -113
  50. data/extconf.rb +0 -216
  51. data/html/bar.svg +0 -153
  52. data/html/developer.html +0 -121
  53. data/html/developer.svg +0 -469
  54. data/html/download.svg +0 -253
  55. data/html/favicon.ico +0 -0
  56. data/html/favicon.xcf +0 -0
  57. data/html/footer.html.erb +0 -28
  58. data/html/head.html.erb +0 -4
  59. data/html/header.html.erb +0 -17
  60. data/html/index.html +0 -147
  61. data/html/install.svg +0 -636
  62. data/html/logo.xcf +0 -0
  63. data/html/ranguba.css +0 -248
  64. data/html/tutorial.svg +0 -559
  65. data/lib/groonga.rb +0 -83
  66. data/lib/groonga/expression-builder.rb +0 -285
  67. data/lib/groonga/patricia-trie.rb +0 -53
  68. data/lib/groonga/record.rb +0 -276
  69. data/lib/groonga/schema.rb +0 -916
  70. data/license/GPL +0 -340
  71. data/license/LGPL +0 -504
  72. data/license/RUBY +0 -59
  73. data/misc/grnop2ruby.rb +0 -49
  74. data/pkg-config.rb +0 -333
  75. data/src/rb-grn-table-cursor.c +0 -296
  76. data/test-unit/Rakefile +0 -40
  77. data/test-unit/TODO +0 -5
  78. data/test-unit/bin/testrb +0 -5
  79. data/test-unit/html/classic.html +0 -15
  80. data/test-unit/html/index.html +0 -25
  81. data/test-unit/html/index.html.ja +0 -27
  82. data/test-unit/lib/test/unit.rb +0 -323
  83. data/test-unit/lib/test/unit/assertionfailederror.rb +0 -25
  84. data/test-unit/lib/test/unit/assertions.rb +0 -1230
  85. data/test-unit/lib/test/unit/attribute.rb +0 -125
  86. data/test-unit/lib/test/unit/autorunner.rb +0 -353
  87. data/test-unit/lib/test/unit/collector.rb +0 -36
  88. data/test-unit/lib/test/unit/collector/descendant.rb +0 -23
  89. data/test-unit/lib/test/unit/collector/dir.rb +0 -108
  90. data/test-unit/lib/test/unit/collector/load.rb +0 -136
  91. data/test-unit/lib/test/unit/collector/objectspace.rb +0 -34
  92. data/test-unit/lib/test/unit/color-scheme.rb +0 -102
  93. data/test-unit/lib/test/unit/color.rb +0 -96
  94. data/test-unit/lib/test/unit/diff.rb +0 -724
  95. data/test-unit/lib/test/unit/error.rb +0 -130
  96. data/test-unit/lib/test/unit/exceptionhandler.rb +0 -39
  97. data/test-unit/lib/test/unit/failure.rb +0 -136
  98. data/test-unit/lib/test/unit/fixture.rb +0 -176
  99. data/test-unit/lib/test/unit/notification.rb +0 -129
  100. data/test-unit/lib/test/unit/omission.rb +0 -191
  101. data/test-unit/lib/test/unit/pending.rb +0 -150
  102. data/test-unit/lib/test/unit/priority.rb +0 -181
  103. data/test-unit/lib/test/unit/runner/console.rb +0 -52
  104. data/test-unit/lib/test/unit/runner/emacs.rb +0 -8
  105. data/test-unit/lib/test/unit/runner/tap.rb +0 -8
  106. data/test-unit/lib/test/unit/testcase.rb +0 -476
  107. data/test-unit/lib/test/unit/testresult.rb +0 -89
  108. data/test-unit/lib/test/unit/testsuite.rb +0 -110
  109. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +0 -14
  110. data/test-unit/lib/test/unit/ui/console/testrunner.rb +0 -464
  111. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +0 -63
  112. data/test-unit/lib/test/unit/ui/tap/testrunner.rb +0 -92
  113. data/test-unit/lib/test/unit/ui/testrunner.rb +0 -28
  114. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +0 -77
  115. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +0 -41
  116. data/test-unit/lib/test/unit/util/backtracefilter.rb +0 -41
  117. data/test-unit/lib/test/unit/util/method-owner-finder.rb +0 -28
  118. data/test-unit/lib/test/unit/util/observable.rb +0 -90
  119. data/test-unit/lib/test/unit/util/procwrapper.rb +0 -48
  120. data/test-unit/lib/test/unit/version.rb +0 -7
  121. data/test-unit/sample/adder.rb +0 -13
  122. data/test-unit/sample/subtracter.rb +0 -12
  123. data/test-unit/sample/test_adder.rb +0 -20
  124. data/test-unit/sample/test_subtracter.rb +0 -20
  125. data/test-unit/sample/test_user.rb +0 -23
  126. data/test-unit/test/collector/test-descendant.rb +0 -133
  127. data/test-unit/test/collector/test-load.rb +0 -329
  128. data/test-unit/test/collector/test_dir.rb +0 -406
  129. data/test-unit/test/collector/test_objectspace.rb +0 -100
  130. data/test-unit/test/run-test.rb +0 -15
  131. data/test-unit/test/test-attribute.rb +0 -86
  132. data/test-unit/test/test-color-scheme.rb +0 -67
  133. data/test-unit/test/test-color.rb +0 -47
  134. data/test-unit/test/test-diff.rb +0 -518
  135. data/test-unit/test/test-emacs-runner.rb +0 -60
  136. data/test-unit/test/test-fixture.rb +0 -287
  137. data/test-unit/test/test-notification.rb +0 -33
  138. data/test-unit/test/test-omission.rb +0 -81
  139. data/test-unit/test/test-pending.rb +0 -70
  140. data/test-unit/test/test-priority.rb +0 -119
  141. data/test-unit/test/test-testcase.rb +0 -554
  142. data/test-unit/test/test_assertions.rb +0 -1151
  143. data/test-unit/test/test_error.rb +0 -26
  144. data/test-unit/test/test_failure.rb +0 -33
  145. data/test-unit/test/test_testresult.rb +0 -113
  146. data/test-unit/test/test_testsuite.rb +0 -129
  147. data/test-unit/test/testunit-test-util.rb +0 -14
  148. data/test-unit/test/ui/test_testrunmediator.rb +0 -20
  149. data/test-unit/test/util/test-method-owner-finder.rb +0 -38
  150. data/test-unit/test/util/test_backtracefilter.rb +0 -41
  151. data/test-unit/test/util/test_observable.rb +0 -102
  152. data/test-unit/test/util/test_procwrapper.rb +0 -36
  153. data/test/.gitignore +0 -1
  154. data/test/groonga-test-utils.rb +0 -106
  155. data/test/run-test.rb +0 -58
  156. data/test/test-array.rb +0 -97
  157. data/test/test-column.rb +0 -298
  158. data/test/test-context.rb +0 -73
  159. data/test/test-database.rb +0 -113
  160. data/test/test-encoding.rb +0 -33
  161. data/test/test-exception.rb +0 -93
  162. data/test/test-expression-builder.rb +0 -156
  163. data/test/test-expression.rb +0 -133
  164. data/test/test-fix-size-column.rb +0 -65
  165. data/test/test-gqtp.rb +0 -70
  166. data/test/test-hash.rb +0 -312
  167. data/test/test-index-column.rb +0 -81
  168. data/test/test-patricia-trie.rb +0 -189
  169. data/test/test-procedure.rb +0 -37
  170. data/test/test-query.rb +0 -22
  171. data/test/test-record.rb +0 -268
  172. data/test/test-remote.rb +0 -53
  173. data/test/test-schema.rb +0 -416
  174. data/test/test-snippet.rb +0 -121
  175. data/test/test-table-cursor.rb +0 -153
  176. data/test/test-table-offset-and-limit.rb +0 -102
  177. data/test/test-table-select-normalize.rb +0 -48
  178. data/test/test-table-select.rb +0 -145
  179. data/test/test-table.rb +0 -642
  180. data/test/test-type.rb +0 -61
  181. data/test/test-variable-size-column.rb +0 -98
  182. data/test/test-variable.rb +0 -28
  183. data/test/test-vector-column.rb +0 -76
  184. data/test/test-version.rb +0 -31
  185. data/text/TUTORIAL.ja.rdoc +0 -392
  186. data/text/expression.rdoc +0 -284
data/ext/rb-grn-type.c DELETED
@@ -1,181 +0,0 @@
1
- /* -*- c-file-style: "ruby" -*- */
2
- /*
3
- Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
4
-
5
- This library is free software; you can redistribute it and/or
6
- modify it under the terms of the GNU Lesser General Public
7
- License version 2.1 as published by the Free Software Foundation.
8
-
9
- This library is distributed in the hope that it will be useful,
10
- but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
- Lesser General Public License for more details.
13
-
14
- You should have received a copy of the GNU Lesser General Public
15
- License along with this library; if not, write to the Free Software
16
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
- */
18
-
19
- #include "rb-grn.h"
20
-
21
- #define SELF(object) (RVAL2GRNTYPE(object))
22
-
23
- VALUE rb_cGrnType;
24
-
25
- /*
26
- * Document-class: Groonga::Type
27
- *
28
- * groongaのテーブルの主キーや、カラムの値の型のためのオブジェ
29
- * クト。型として使用可能なものはgroongaで予め定義済みの型、ユ
30
- * ーザが定義する型、またはユーザが定義したテーブル。
31
- */
32
-
33
-
34
- grn_obj *
35
- rb_grn_type_from_ruby_object (VALUE object)
36
- {
37
- if (!RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cGrnType))) {
38
- rb_raise(rb_eTypeError, "not a groonga type");
39
- }
40
-
41
- return RVAL2GRNOBJECT(object, NULL);
42
- }
43
-
44
- VALUE
45
- rb_grn_type_to_ruby_object (grn_ctx *context, grn_obj *type,
46
- rb_grn_boolean owner)
47
- {
48
- return GRNOBJECT2RVAL(rb_cGrnType, context, type, owner);
49
- }
50
-
51
- /*
52
- * call-seq:
53
- * Groonga::Type.new(name, options={})
54
- *
55
- * 名前が_name_の型を作成する。_options_に指定可能な値は以下の通
56
- * り。
57
- *
58
- * [+:type+]
59
- * :integer(符号付き整数)、:int(:integerの省略
60
- * 形)、:unsigned_integer(符号なし整
61
- * 数)、:uint(:unsigned_integerの省略形)、:float(浮動小
62
- * 数点数)、:variable(可変長文字列)のいずれかを指定する。
63
- * 省略した場合は:variableを指定したものと扱う。
64
- *
65
- * :variableを指定した場合は必ず+:size+を指定しなければいけない。
66
- *
67
- * [+:context+]
68
- * 型の作成時に利用するGroonga::Contextを指定する。省略すると
69
- * Groonga::Context.defaultを用いる。
70
- *
71
- * [+:size+]
72
- * +:option+が:variableの場合は最大長、それ以外の場合は長さを
73
- * 指定する(単位:byte)。
74
- */
75
- static VALUE
76
- rb_grn_type_initialize (int argc, VALUE *argv, VALUE self)
77
- {
78
- grn_ctx *context;
79
- grn_obj *type;
80
- const char *name = NULL;
81
- unsigned name_size, size = 0;
82
- grn_obj_flags flags = 0;
83
- VALUE rb_name, options, rb_context, rb_type, rb_size;
84
-
85
- rb_scan_args(argc, argv, "11", &rb_name, &options);
86
-
87
- rb_grn_scan_options(options,
88
- "context", &rb_context,
89
- "type", &rb_type,
90
- "size", &rb_size,
91
- NULL);
92
-
93
- name = StringValuePtr(rb_name);
94
- name_size = RSTRING_LEN(rb_name);
95
-
96
- context = rb_grn_context_ensure(&rb_context);
97
-
98
- if (NIL_P(rb_type) ||
99
- rb_grn_equal_option(rb_type, "variable")) {
100
- flags = GRN_OBJ_KEY_VAR_SIZE;
101
- } else if (rb_grn_equal_option(rb_type, "integer") ||
102
- rb_grn_equal_option(rb_type, "int")) {
103
- flags = GRN_OBJ_KEY_INT;
104
- size = sizeof(int);
105
- } else if (rb_grn_equal_option(rb_type, "unsigned_integer") ||
106
- rb_grn_equal_option(rb_type, "uint")) {
107
- flags = GRN_OBJ_KEY_UINT;
108
- size = sizeof(unsigned int);
109
- } else if (rb_grn_equal_option(rb_type, "float")) {
110
- flags = GRN_OBJ_KEY_FLOAT;
111
- size = sizeof(double);
112
- } else {
113
- rb_raise(rb_eArgError,
114
- ":type should be one of "
115
- "[:integer, :int, :unsigned_integer, :uint, "
116
- ":float, :variable]: %s",
117
- rb_grn_inspect(options));
118
- }
119
-
120
- if (NIL_P(rb_size)) {
121
- if (size == 0)
122
- rb_raise(rb_eArgError, "size is missing: %s",
123
- rb_grn_inspect(options));
124
- } else {
125
- size = NUM2UINT(rb_size);
126
- }
127
-
128
- type = grn_type_create(context, name, name_size, flags, size);
129
- rb_grn_object_assign(Qnil, self, rb_context, context, type);
130
- rb_grn_context_check(context, rb_ary_new4(argc, argv));
131
-
132
- return Qnil;
133
- }
134
-
135
- void
136
- rb_grn_init_type (VALUE mGrn)
137
- {
138
- rb_cGrnType = rb_define_class_under(mGrn, "Type", rb_cGrnObject);
139
-
140
- rb_define_method(rb_cGrnType, "initialize", rb_grn_type_initialize, -1);
141
-
142
- /* 任意のテーブルに属する全てのレコード(Object型はv1.2で
143
- サポートされます)。 */
144
- rb_define_const(rb_cGrnType, "OBJECT", INT2NUM(GRN_DB_OBJECT));
145
- /* bool型。trueとfalse。 */
146
- rb_define_const(rb_cGrnType, "BOOLEAN", INT2NUM(GRN_DB_BOOL));
147
- /* bool型。trueとfalse。 */
148
- rb_define_const(rb_cGrnType, "BOOL", INT2NUM(GRN_DB_BOOL));
149
- /* 8bit符号付き整数。 */
150
- rb_define_const(rb_cGrnType, "INT8", INT2NUM(GRN_DB_INT8));
151
- /* 8bit符号なし整数。 */
152
- rb_define_const(rb_cGrnType, "UINT8", INT2NUM(GRN_DB_UINT8));
153
- /* 16bit符号付き整数。 */
154
- rb_define_const(rb_cGrnType, "INT16", INT2NUM(GRN_DB_INT16));
155
- /* 16bit符号なし整数。 */
156
- rb_define_const(rb_cGrnType, "UINT16", INT2NUM(GRN_DB_UINT16));
157
- /* 32bit符号付き整数。 */
158
- rb_define_const(rb_cGrnType, "INT32", INT2NUM(GRN_DB_INT32));
159
- /* 32bit符号なし整数。 */
160
- rb_define_const(rb_cGrnType, "UINT32", INT2NUM(GRN_DB_UINT32));
161
- /* 64bit符号付き整数。 */
162
- rb_define_const(rb_cGrnType, "INT64", INT2NUM(GRN_DB_INT64));
163
- /* 64bit符号なし整数。 */
164
- rb_define_const(rb_cGrnType, "UINT64", INT2NUM(GRN_DB_UINT64));
165
- /* ieee754形式の64bit浮動小数点数。 */
166
- rb_define_const(rb_cGrnType, "FLOAT", INT2NUM(GRN_DB_FLOAT));
167
- /* 1970年1月1日0時0分0秒からの経過マイクロ秒数を64bit符
168
- 号付き整数で表現した値。 */
169
- rb_define_const(rb_cGrnType, "TIME", INT2NUM(GRN_DB_TIME));
170
- /* 4Kbyte以下の文字列。 */
171
- rb_define_const(rb_cGrnType, "SHORT_TEXT", INT2NUM(GRN_DB_SHORT_TEXT));
172
- /* 64Kbyte以下の文字列。 */
173
- rb_define_const(rb_cGrnType, "TEXT", INT2NUM(GRN_DB_TEXT));
174
- /* 2Gbyte以下の文字列。 */
175
- rb_define_const(rb_cGrnType, "LONG_TEXT", INT2NUM(GRN_DB_LONG_TEXT));
176
- rb_define_const(rb_cGrnType, "DELIMIT", INT2NUM(GRN_DB_DELIMIT));
177
- rb_define_const(rb_cGrnType, "UNIGRAM", INT2NUM(GRN_DB_UNIGRAM));
178
- rb_define_const(rb_cGrnType, "BIGRAM", INT2NUM(GRN_DB_BIGRAM));
179
- rb_define_const(rb_cGrnType, "TRIGRAM", INT2NUM(GRN_DB_TRIGRAM));
180
- rb_define_const(rb_cGrnType, "MECAB", INT2NUM(GRN_DB_MECAB));
181
- }
data/ext/rb-grn-utils.c DELETED
@@ -1,769 +0,0 @@
1
- /* -*- c-file-style: "ruby" -*- */
2
- /* vim: set sts=4 sw=4 ts=8 noet: */
3
- /*
4
- Copyright (C) 2009-2010 Kouhei Sutou <kou@clear-code.com>
5
-
6
- This library is free software; you can redistribute it and/or
7
- modify it under the terms of the GNU Lesser General Public
8
- License version 2.1 as published by the Free Software Foundation.
9
-
10
- This library is distributed in the hope that it will be useful,
11
- but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- Lesser General Public License for more details.
14
-
15
- You should have received a copy of the GNU Lesser General Public
16
- License along with this library; if not, write to the Free Software
17
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
- */
19
-
20
- #include "rb-grn.h"
21
-
22
- #include <stdarg.h>
23
-
24
- const char *
25
- rb_grn_inspect (VALUE object)
26
- {
27
- VALUE inspected;
28
-
29
- inspected = rb_funcall(object, rb_intern("inspect"), 0);
30
- return StringValueCStr(inspected);
31
- }
32
-
33
- void
34
- rb_grn_scan_options (VALUE options, ...)
35
- {
36
- VALUE available_keys;
37
- const char *key;
38
- VALUE *value;
39
- va_list args;
40
-
41
- if (NIL_P(options))
42
- options = rb_hash_new();
43
- else
44
- options = rb_funcall(options, rb_intern("dup"), 0);
45
-
46
- Check_Type(options, T_HASH);
47
-
48
- available_keys = rb_ary_new();
49
- va_start(args, options);
50
- key = va_arg(args, const char *);
51
- while (key) {
52
- VALUE rb_key;
53
- value = va_arg(args, VALUE *);
54
-
55
- rb_key = RB_GRN_INTERN(key);
56
- rb_ary_push(available_keys, rb_key);
57
- *value = rb_funcall(options, rb_intern("delete"), 1, rb_key);
58
-
59
- key = va_arg(args, const char *);
60
- }
61
- va_end(args);
62
-
63
- if (RVAL2CBOOL(rb_funcall(options, rb_intern("empty?"), 0)))
64
- return;
65
-
66
- rb_raise(rb_eArgError,
67
- "unexpected key(s) exist: %s: available keys: %s",
68
- rb_grn_inspect(rb_funcall(options, rb_intern("keys"), 0)),
69
- rb_grn_inspect(available_keys));
70
- }
71
-
72
- rb_grn_boolean
73
- rb_grn_equal_option (VALUE option, const char *key)
74
- {
75
- VALUE key_string, key_symbol;
76
-
77
- key_string = rb_str_new2(key);
78
- if (RVAL2CBOOL(rb_funcall(option, rb_intern("=="), 1, key_string)))
79
- return RB_GRN_TRUE;
80
-
81
- key_symbol = rb_str_intern(key_string);
82
- if (RVAL2CBOOL(rb_funcall(option, rb_intern("=="), 1, key_symbol)))
83
- return RB_GRN_TRUE;
84
-
85
- return RB_GRN_FALSE;
86
- }
87
-
88
- static VALUE
89
- rb_grn_bulk_to_ruby_object_by_range_id (grn_ctx *context, grn_obj *bulk,
90
- grn_id range_id,
91
- VALUE related_object, VALUE *rb_value)
92
- {
93
- rb_grn_boolean success = RB_GRN_TRUE;
94
-
95
- switch (range_id) {
96
- case GRN_DB_VOID:
97
- *rb_value = rb_str_new(GRN_TEXT_VALUE(bulk), GRN_TEXT_LEN(bulk));
98
- break;
99
- case GRN_DB_BOOL:
100
- *rb_value = GRN_BOOL_VALUE(bulk) ? Qtrue : Qfalse;
101
- break;
102
- case GRN_DB_INT32:
103
- *rb_value = INT2NUM(GRN_INT32_VALUE(bulk));
104
- break;
105
- case GRN_DB_UINT32:
106
- *rb_value = UINT2NUM(GRN_UINT32_VALUE(bulk));
107
- break;
108
- case GRN_DB_INT64:
109
- *rb_value = LL2NUM(GRN_INT64_VALUE(bulk));
110
- break;
111
- case GRN_DB_UINT64:
112
- *rb_value = ULL2NUM(GRN_UINT64_VALUE(bulk));
113
- break;
114
- case GRN_DB_FLOAT:
115
- *rb_value = rb_float_new(GRN_FLOAT_VALUE(bulk));
116
- break;
117
- case GRN_DB_TIME:
118
- {
119
- int64_t time_value, sec, usec;
120
-
121
- time_value = GRN_TIME_VALUE(bulk);
122
- GRN_TIME_UNPACK(time_value, sec, usec);
123
- *rb_value = rb_funcall(rb_cTime, rb_intern("at"), 2,
124
- LL2NUM(sec), LL2NUM(usec));
125
- }
126
- break;
127
- case GRN_DB_SHORT_TEXT:
128
- case GRN_DB_TEXT:
129
- case GRN_DB_LONG_TEXT:
130
- *rb_value = rb_grn_context_rb_string_new(context,
131
- GRN_TEXT_VALUE(bulk),
132
- GRN_TEXT_LEN(bulk));
133
- break;
134
- default:
135
- success = RB_GRN_FALSE;
136
- break;
137
- }
138
-
139
- return success;
140
- }
141
-
142
- static VALUE
143
- rb_grn_bulk_to_ruby_object_by_range_type (grn_ctx *context, grn_obj *bulk,
144
- grn_obj *range, grn_id range_id,
145
- VALUE related_object, VALUE *rb_value)
146
- {
147
- rb_grn_boolean success = RB_GRN_TRUE;
148
-
149
- if (!range && range_id != GRN_ID_NIL) {
150
- range = grn_ctx_at(context, range_id);
151
- }
152
-
153
- if (!range)
154
- return RB_GRN_FALSE;
155
-
156
- switch (range->header.type) {
157
- case GRN_TABLE_HASH_KEY:
158
- case GRN_TABLE_PAT_KEY:
159
- case GRN_TABLE_NO_KEY:
160
- {
161
- grn_id id;
162
-
163
- id = *((grn_id *)GRN_BULK_HEAD(bulk));
164
- if (id == GRN_ID_NIL) {
165
- *rb_value = Qnil;
166
- } else {
167
- VALUE rb_range;
168
-
169
- rb_range = GRNOBJECT2RVAL(Qnil, context, range, RB_GRN_FALSE);
170
- *rb_value = rb_grn_record_new(rb_range, id, Qnil);
171
- }
172
- }
173
- break;
174
- case GRN_TYPE:
175
- if (range->header.flags & GRN_OBJ_KEY_VAR_SIZE) {
176
- *rb_value = rb_grn_context_rb_string_new(context,
177
- GRN_BULK_HEAD(bulk),
178
- GRN_BULK_VSIZE(bulk));
179
- } else {
180
- switch (range->header.flags & GRN_OBJ_KEY_MASK) {
181
- case GRN_OBJ_KEY_UINT:
182
- *rb_value = INT2NUM(GRN_UINT32_VALUE(bulk));
183
- break;
184
- case GRN_OBJ_KEY_INT:
185
- *rb_value = INT2NUM(GRN_INT32_VALUE(bulk));
186
- break;
187
- case GRN_OBJ_KEY_FLOAT:
188
- *rb_value = rb_float_new(GRN_FLOAT_VALUE(bulk));
189
- break;
190
- default:
191
- success = RB_GRN_FALSE;
192
- }
193
- break;
194
- }
195
- break;
196
- default:
197
- success = RB_GRN_FALSE;
198
- break;
199
- }
200
-
201
- return success;
202
- }
203
-
204
- VALUE
205
- rb_grn_bulk_to_ruby_object (grn_ctx *context, grn_obj *bulk,
206
- grn_obj *range, VALUE related_object)
207
- {
208
- grn_id range_id;
209
- VALUE rb_value = Qnil;
210
-
211
- if (GRN_BULK_EMPTYP(bulk))
212
- return Qnil;
213
-
214
- range_id = bulk->header.domain;
215
- if (rb_grn_bulk_to_ruby_object_by_range_id(context, bulk, range_id,
216
- related_object, &rb_value))
217
- return rb_value;
218
-
219
- if (rb_grn_bulk_to_ruby_object_by_range_type(context, bulk,
220
- range, range_id,
221
- related_object, &rb_value))
222
- return rb_value;
223
-
224
- return rb_grn_context_rb_string_new(context,
225
- GRN_BULK_HEAD(bulk),
226
- GRN_BULK_VSIZE(bulk));
227
- }
228
-
229
- grn_obj *
230
- rb_grn_bulk_from_ruby_object (VALUE object, grn_ctx *context, grn_obj *bulk)
231
- {
232
- if (bulk && bulk->header.domain == GRN_DB_TIME)
233
- return rb_grn_bulk_from_ruby_object_with_type(
234
- object, context, bulk, bulk->header.domain,
235
- grn_ctx_at(context, bulk->header.domain));
236
-
237
- if (!bulk) {
238
- bulk = grn_obj_open(context, GRN_BULK, 0, GRN_ID_NIL);
239
- rb_grn_context_check(context, object);
240
- }
241
-
242
- switch (TYPE(object)) {
243
- case T_NIL:
244
- grn_obj_reinit(context, bulk, GRN_DB_VOID, 0);
245
- break;
246
- case T_STRING:
247
- grn_obj_reinit(context, bulk, GRN_DB_TEXT, 0);
248
- GRN_TEXT_SET(context, bulk, RSTRING_PTR(object), RSTRING_LEN(object));
249
- break;
250
- case T_FIXNUM:
251
- grn_obj_reinit(context, bulk, GRN_DB_INT32, 0);
252
- GRN_INT32_SET(context, bulk, NUM2INT(object));
253
- break;
254
- case T_BIGNUM:
255
- {
256
- int64_t int64_value;
257
- int64_value = NUM2LL(object);
258
- if (int64_value <= INT32_MAX) {
259
- grn_obj_reinit(context, bulk, GRN_DB_INT32, 0);
260
- GRN_INT32_SET(context, bulk, int64_value);
261
- } else {
262
- grn_obj_reinit(context, bulk, GRN_DB_INT64, 0);
263
- GRN_INT64_SET(context, bulk, int64_value);
264
- }
265
- }
266
- break;
267
- case T_FLOAT:
268
- grn_obj_reinit(context, bulk, GRN_DB_FLOAT, 0);
269
- GRN_FLOAT_SET(context, bulk, NUM2DBL(object));
270
- break;
271
- case T_TRUE:
272
- grn_obj_reinit(context, bulk, GRN_DB_BOOL, 0);
273
- GRN_BOOL_SET(context, bulk, GRN_TRUE);
274
- break;
275
- case T_FALSE:
276
- grn_obj_reinit(context, bulk, GRN_DB_BOOL, 0);
277
- GRN_BOOL_SET(context, bulk, GRN_FALSE);
278
- break;
279
- default:
280
- if (RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cTime))) {
281
- VALUE sec, usec;
282
- int64_t time_value;
283
-
284
- sec = rb_funcall(object, rb_intern("to_i"), 0);
285
- usec = rb_funcall(object, rb_intern("usec"), 0);
286
- time_value = GRN_TIME_PACK(NUM2LL(sec), NUM2LL(usec));
287
- grn_obj_reinit(context, bulk, GRN_DB_TIME, 0);
288
- GRN_TIME_SET(context, bulk, time_value);
289
- } else if (RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cGrnObject))) {
290
- grn_obj *grn_object;
291
- grn_id id_value;
292
-
293
- grn_object = RVAL2GRNOBJECT(object, &context);
294
- grn_obj_reinit(context, bulk, grn_object->header.domain, 0);
295
- id_value = grn_obj_id(context, grn_object);
296
- GRN_RECORD_SET(context, bulk, id_value);
297
- } else if (RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cGrnRecord))) {
298
- grn_obj *table;
299
- grn_id id_value;
300
-
301
- table = RVAL2GRNOBJECT(rb_funcall(object, rb_intern("table"), 0),
302
- &context);
303
- id_value = NUM2UINT(rb_funcall(object, rb_intern("id"), 0));
304
- grn_obj_reinit(context, bulk, grn_obj_id(context, table), 0);
305
- GRN_RECORD_SET(context, bulk, id_value);
306
- } else {
307
- rb_raise(rb_eTypeError,
308
- "bulked object should be one of "
309
- "[nil, true, false, String, Integer, Float, Time, "
310
- "Groonga::Object, Groonga::Record]: %s",
311
- rb_grn_inspect(object));
312
- }
313
- break;
314
- }
315
-
316
- return bulk;
317
- }
318
-
319
- grn_obj *
320
- rb_grn_bulk_from_ruby_object_with_type (VALUE object, grn_ctx *context,
321
- grn_obj *bulk,
322
- grn_id type_id, grn_obj *type)
323
- {
324
- const char *string;
325
- unsigned int size;
326
- int32_t int32_value;
327
- uint32_t uint32_value;
328
- int64_t int64_value;
329
- uint64_t uint64_value;
330
- int64_t time_value;
331
- double double_value;
332
- grn_id range;
333
- VALUE rb_type_object;
334
- grn_obj_flags flags = 0;
335
-
336
- switch (type_id) {
337
- case GRN_DB_INT32:
338
- int32_value = NUM2INT(object);
339
- string = (const char *)&int32_value;
340
- size = sizeof(int32_value);
341
- break;
342
- case GRN_DB_UINT32:
343
- uint32_value = NUM2UINT(object);
344
- string = (const char *)&uint32_value;
345
- size = sizeof(uint32_value);
346
- break;
347
- case GRN_DB_INT64:
348
- int64_value = NUM2LL(object);
349
- string = (const char *)&int64_value;
350
- size = sizeof(int64_value);
351
- break;
352
- case GRN_DB_UINT64:
353
- uint64_value = NUM2ULL(object);
354
- string = (const char *)&uint64_value;
355
- size = sizeof(uint64_value);
356
- break;
357
- case GRN_DB_FLOAT:
358
- double_value = NUM2DBL(object);
359
- string = (const char *)&double_value;
360
- size = sizeof(double_value);
361
- break;
362
- case GRN_DB_TIME:
363
- {
364
- VALUE rb_sec, rb_usec;
365
- int64_t sec;
366
- int32_t usec;
367
-
368
- switch (TYPE(object)) {
369
- case T_FIXNUM:
370
- case T_BIGNUM:
371
- sec = NUM2LL(object);
372
- usec = 0;
373
- break;
374
- case T_FLOAT:
375
- rb_sec = rb_funcall(object, rb_intern("to_i"), 0);
376
- rb_usec = rb_funcall(object, rb_intern("remainder"), 1,
377
- INT2NUM(1));
378
-
379
- sec = NUM2LL(rb_sec);
380
- usec = (int32_t)(NUM2DBL(rb_usec) * 1000000);
381
- break;
382
- case T_NIL:
383
- sec = 0;
384
- usec = 0;
385
- break;
386
- default:
387
- sec = NUM2LL(rb_funcall(object, rb_intern("to_i"), 0));
388
- usec = NUM2INT(rb_funcall(object, rb_intern("usec"), 0));
389
- break;
390
- }
391
-
392
- time_value = GRN_TIME_PACK(sec, usec);
393
- }
394
- string = (const char *)&time_value;
395
- size = sizeof(time_value);
396
- break;
397
- case GRN_DB_SHORT_TEXT:
398
- case GRN_DB_TEXT:
399
- case GRN_DB_LONG_TEXT:
400
- string = StringValuePtr(object);
401
- size = RSTRING_LEN(object);
402
- range = grn_obj_get_range(context, type);
403
- if (size > range)
404
- rb_raise(rb_eArgError,
405
- "string is too large: expected: %u <= %u",
406
- size, range);
407
- flags |= GRN_OBJ_DO_SHALLOW_COPY;
408
- break;
409
- case GRN_DB_VOID:
410
- case GRN_DB_DELIMIT:
411
- case GRN_DB_UNIGRAM:
412
- case GRN_DB_BIGRAM:
413
- case GRN_DB_TRIGRAM:
414
- case GRN_DB_MECAB:
415
- rb_type_object = GRNOBJECT2RVAL(Qnil, context, type, RB_GRN_FALSE);
416
- rb_raise(rb_eArgError,
417
- "unbulkable type: %s",
418
- rb_grn_inspect(rb_type_object));
419
- break;
420
- default:
421
- return RVAL2GRNBULK(object, context, bulk);
422
- break;
423
- }
424
-
425
- if (!bulk) {
426
- bulk = grn_obj_open(context, GRN_BULK, flags, GRN_ID_NIL);
427
- rb_grn_context_check(context, object);
428
- }
429
- GRN_TEXT_SET(context, bulk, string, size);
430
-
431
- return bulk;
432
- }
433
-
434
-
435
- VALUE
436
- rb_grn_vector_to_ruby_object (grn_ctx *context, grn_obj *vector)
437
- {
438
- VALUE array;
439
- grn_obj value;
440
- unsigned int i, n;
441
-
442
- if (!vector)
443
- return Qnil;
444
-
445
- GRN_VOID_INIT(&value);
446
- n = grn_vector_size(context, vector);
447
- array = rb_ary_new2(n);
448
- for (i = 0; i < n; i++) {
449
- const char *_value;
450
- unsigned int weight, length;
451
- grn_id domain;
452
-
453
- length = grn_vector_get_element(context, vector, i,
454
- &_value, &weight, &domain);
455
- grn_obj_reinit(context, &value, domain, 0);
456
- grn_bulk_write(context, &value, _value, length);
457
- rb_ary_push(array, GRNOBJ2RVAL(Qnil, context, &value, Qnil));
458
- /* UINT2NUM(weight); */ /* TODO: How handle weight? */
459
- }
460
- GRN_OBJ_FIN(context, &value);
461
-
462
- return array;
463
- }
464
-
465
- grn_obj *
466
- rb_grn_vector_from_ruby_object (VALUE object, grn_ctx *context, grn_obj *vector)
467
- {
468
- VALUE *values;
469
- grn_obj value;
470
- int i, n;
471
-
472
- if (vector)
473
- GRN_OBJ_INIT(vector, GRN_VECTOR, 0, GRN_ID_NIL);
474
- else
475
- vector = grn_obj_open(context, GRN_VECTOR, 0, 0);
476
-
477
- if (NIL_P(object))
478
- return vector;
479
-
480
- GRN_VOID_INIT(&value);
481
- n = RARRAY_LEN(object);
482
- values = RARRAY_PTR(object);
483
- for (i = 0; i < n; i++) {
484
- grn_obj *_value = &value;
485
- RVAL2GRNOBJ(values[i], context, &_value);
486
- grn_vector_add_element(context, vector,
487
- GRN_BULK_HEAD(&value),
488
- GRN_BULK_VSIZE(&value),
489
- 0,
490
- value.header.domain);
491
- }
492
- GRN_OBJ_FIN(context, &value);
493
-
494
- return vector;
495
- }
496
-
497
- VALUE
498
- rb_grn_uvector_to_ruby_object (grn_ctx *context, grn_obj *uvector)
499
- {
500
- VALUE array;
501
- grn_id *current, *end;
502
-
503
- if (!uvector)
504
- return Qnil;
505
-
506
- array = rb_ary_new();
507
- current = (grn_id *)GRN_BULK_HEAD(uvector);
508
- end = (grn_id *)GRN_BULK_CURR(uvector);
509
- while (current < end) {
510
- rb_ary_push(array, UINT2NUM(*current));
511
- current++;
512
- }
513
-
514
- return array;
515
- }
516
-
517
- grn_obj *
518
- rb_grn_uvector_from_ruby_object (VALUE object, grn_ctx *context,
519
- grn_obj *uvector, VALUE related_object)
520
- {
521
- VALUE *values;
522
- int i, n;
523
-
524
- if (NIL_P(object))
525
- return NULL;
526
-
527
- n = RARRAY_LEN(object);
528
- values = RARRAY_PTR(object);
529
- for (i = 0; i < n; i++) {
530
- VALUE value;
531
- grn_id id;
532
- void *grn_value;
533
-
534
- value = values[i];
535
- switch (TYPE(value)) {
536
- case T_FIXNUM:
537
- id = NUM2UINT(value);
538
- break;
539
- default:
540
- if (RVAL2CBOOL(rb_obj_is_kind_of(value, rb_cGrnRecord))) {
541
- id = NUM2UINT(rb_funcall(value, rb_intern("id"), 0));
542
- } else {
543
- grn_obj_close(context, uvector);
544
- rb_raise(rb_eArgError,
545
- "uvector value should be one of "
546
- "[Fixnum, Groonga::Record]: %s (%s): %s",
547
- rb_grn_inspect(value),
548
- rb_grn_inspect(object),
549
- rb_grn_inspect(related_object));
550
- }
551
- break;
552
- }
553
- grn_value = &id;
554
- grn_bulk_write(context, uvector, grn_value, sizeof(grn_id));
555
- }
556
-
557
- return uvector;
558
- }
559
-
560
- VALUE
561
- rb_grn_value_to_ruby_object (grn_ctx *context,
562
- grn_obj *value,
563
- grn_obj *range,
564
- VALUE related_object)
565
- {
566
- if (!value)
567
- return Qnil;
568
-
569
- switch (value->header.type) {
570
- case GRN_VOID:
571
- return Qnil;
572
- break;
573
- case GRN_BULK:
574
- if (GRN_BULK_EMPTYP(value))
575
- return Qnil;
576
- if (value->header.domain == GRN_ID_NIL && range)
577
- value->header.domain = grn_obj_id(context, range);
578
- return GRNBULK2RVAL(context, value, range, related_object);
579
- break;
580
- case GRN_UVECTOR:
581
- {
582
- VALUE rb_value, rb_range = Qnil;
583
- grn_id *uvector, *uvector_end;
584
-
585
- rb_value = rb_ary_new();
586
- if (range)
587
- rb_range = GRNTABLE2RVAL(context, range, RB_GRN_FALSE);
588
- uvector = (grn_id *)GRN_BULK_HEAD(value);
589
- uvector_end = (grn_id *)GRN_BULK_CURR(value);
590
- for (; uvector < uvector_end; uvector++) {
591
- VALUE record = Qnil;
592
- if (*uvector != GRN_ID_NIL)
593
- record = rb_grn_record_new(rb_range, *uvector, Qnil);
594
- rb_ary_push(rb_value, record);
595
- }
596
- return rb_value;
597
- }
598
- break;
599
- case GRN_VECTOR:
600
- return GRNVECTOR2RVAL(context, value);
601
- break;
602
- default:
603
- rb_raise(rb_eGrnError,
604
- "unsupported value type: 0x%0x: %s",
605
- value->header.type, rb_grn_inspect(related_object));
606
- break;
607
- }
608
-
609
- if (!range)
610
- return GRNOBJECT2RVAL(Qnil, context, value, RB_GRN_FALSE);
611
-
612
- return Qnil;
613
- }
614
-
615
- grn_id
616
- rb_grn_id_from_ruby_object (VALUE object, grn_ctx *context, grn_obj *table,
617
- VALUE related_object)
618
- {
619
- VALUE rb_id;
620
-
621
- if (NIL_P(object))
622
- return Qnil;
623
-
624
- if (RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cGrnRecord))) {
625
- VALUE rb_table;
626
- rb_table = rb_funcall(object, rb_intern("table"), 0);
627
- if (table && RVAL2GRNOBJECT(rb_table, &context) != table) {
628
- VALUE rb_expected_table;
629
-
630
- rb_expected_table =
631
- GRNOBJECT2RVAL(Qnil, context, table, RB_GRN_FALSE);
632
- rb_raise(rb_eGrnError,
633
- "wrong table: expected <%s>: actual <%s>",
634
- rb_grn_inspect(rb_expected_table),
635
- rb_grn_inspect(rb_table));
636
- }
637
- rb_id = rb_funcall(object, rb_intern("id"), 0);
638
- } else {
639
- rb_id = object;
640
- }
641
-
642
- if (!RVAL2CBOOL(rb_obj_is_kind_of(rb_id, rb_cInteger)))
643
- rb_raise(rb_eGrnError,
644
- "should be unsigned integer or Groogna::Record: <%s>: <%s>",
645
- rb_grn_inspect(object),
646
- rb_grn_inspect(related_object));
647
-
648
- return NUM2UINT(rb_id);
649
- }
650
-
651
- VALUE
652
- rb_grn_key_to_ruby_object (grn_ctx *context, const void *key, int key_size,
653
- grn_obj *table, VALUE related_object)
654
- {
655
- grn_obj bulk;
656
-
657
- GRN_OBJ_INIT(&bulk, GRN_BULK, GRN_OBJ_DO_SHALLOW_COPY, table->header.domain);
658
- GRN_TEXT_SET(context, &bulk, key, key_size);
659
-
660
- return GRNBULK2RVAL(context, &bulk, NULL, related_object);
661
- }
662
-
663
- grn_obj *
664
- rb_grn_key_from_ruby_object (VALUE rb_key, grn_ctx *context,
665
- grn_obj *key, grn_id domain_id, grn_obj *domain,
666
- VALUE related_object)
667
- {
668
- grn_id id;
669
-
670
- if (!domain)
671
- return RVAL2GRNBULK(rb_key, context, key);
672
-
673
- switch (domain->header.type) {
674
- case GRN_TYPE:
675
- return RVAL2GRNBULK_WITH_TYPE(rb_key, context, key, domain_id, domain);
676
- break;
677
- case GRN_TABLE_HASH_KEY:
678
- case GRN_TABLE_PAT_KEY:
679
- case GRN_TABLE_NO_KEY:
680
- id = RVAL2GRNID(rb_key, context, domain, related_object);
681
- break;
682
- default:
683
- if (!RVAL2CBOOL(rb_obj_is_kind_of(rb_key, rb_cInteger)))
684
- rb_raise(rb_eGrnError,
685
- "should be unsigned integer: <%s>: <%s>",
686
- rb_grn_inspect(rb_key),
687
- rb_grn_inspect(related_object));
688
-
689
- id = NUM2UINT(rb_key);
690
- break;
691
- }
692
-
693
- GRN_TEXT_SET(context, key, &id, sizeof(id));
694
- return key;
695
- }
696
-
697
- grn_obj *
698
- rb_grn_obj_from_ruby_object (VALUE rb_object, grn_ctx *context, grn_obj **_obj)
699
- {
700
- if (RVAL2CBOOL(rb_obj_is_kind_of(rb_object, rb_cGrnObject))) {
701
- if (*_obj) {
702
- grn_obj_close(context, *_obj); /* TODO: reduce memory allocation */
703
- }
704
- *_obj = RVAL2GRNOBJECT(rb_object, &context);
705
- } else {
706
- *_obj = RVAL2GRNBULK(rb_object, context, *_obj);
707
- }
708
-
709
- return *_obj;
710
- }
711
-
712
- VALUE
713
- rb_grn_obj_to_ruby_object (VALUE klass, grn_ctx *context,
714
- grn_obj *obj, VALUE related_object)
715
- {
716
- if (!obj)
717
- return Qnil;
718
-
719
- /* if (NIL_P(klass)) */
720
- /* klass = GRNOBJECT2RCLASS(obj); */
721
-
722
- switch (obj->header.type) {
723
- case GRN_VOID:
724
- if (GRN_BULK_VSIZE(obj) > 0)
725
- return rb_str_new(GRN_BULK_HEAD(obj), GRN_BULK_VSIZE(obj));
726
- else
727
- return Qnil;
728
- break;
729
- case GRN_BULK:
730
- return GRNBULK2RVAL(context, obj, NULL, related_object);
731
- break;
732
- /* case GRN_PTR: */
733
- /* case GRN_UVECTOR: */
734
- /* case GRN_PVECTOR: */
735
- /* case GRN_VECTOR: */
736
- /* case GRN_MSG: */
737
- /* case GRN_QUERY: */
738
- /* case GRN_ACCESSOR: */
739
- /* case GRN_SNIP: */
740
- /* case GRN_PATSNIP: */
741
- /* case GRN_CURSOR_TABLE_HASH_KEY: */
742
- /* case GRN_CURSOR_TABLE_PAT_KEY: */
743
- /* case GRN_CURSOR_TABLE_NO_KEY: */
744
- /* case GRN_CURSOR_COLUMN_INDEX: */
745
- /* case GRN_TYPE: */
746
- /* case GRN_PROC: */
747
- /* case GRN_EXPR: */
748
- /* case GRN_TABLE_HASH_KEY: */
749
- /* case GRN_TABLE_PAT_KEY: */
750
- /* case GRN_TABLE_NO_KEY: */
751
- /* case GRN_DB: */
752
- /* case GRN_COLUMN_FIX_SIZE: */
753
- /* case GRN_COLUMN_VAR_SIZE: */
754
- /* case GRN_COLUMN_INDEX: */
755
- default:
756
- rb_raise(rb_eTypeError,
757
- "unsupported groonga object: 0x%x: <%s>",
758
- obj->header.type,
759
- rb_grn_inspect(related_object));
760
- break;
761
- }
762
-
763
- return Qnil;
764
- }
765
-
766
- void
767
- rb_grn_init_utils (VALUE mGrn)
768
- {
769
- }