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-logger.c DELETED
@@ -1,325 +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
- /*
22
- * Document-class: Groonga::Logger
23
- *
24
- * groongaから出力されるログを記録するためのクラス。
25
- *
26
- */
27
-
28
- #define RVAL2GRNWRAPPER(object) (rb_grn_logger_info_wrapper_from_ruby_object(object))
29
- #define RVAL2GRNLOGLEVEL(object) (rb_grn_log_level_from_ruby_object(object))
30
- #define GRNLOGLEVEL2RVAL(level) (rb_grn_log_level_to_ruby_object(level))
31
-
32
- VALUE cGrnLogger;
33
-
34
- typedef struct _rb_grn_logger_info_wrapper
35
- {
36
- grn_logger_info *logger;
37
- VALUE handler;
38
- } rb_grn_logger_info_wrapper;
39
-
40
- static rb_grn_logger_info_wrapper *
41
- rb_grn_logger_info_wrapper_from_ruby_object (VALUE object)
42
- {
43
- rb_grn_logger_info_wrapper *wrapper;
44
-
45
- if (NIL_P(object))
46
- return NULL;
47
-
48
- if (!RVAL2CBOOL(rb_obj_is_kind_of(object, cGrnLogger))) {
49
- rb_raise(rb_eTypeError, "not a groonga logger");
50
- }
51
-
52
- Data_Get_Struct(object, rb_grn_logger_info_wrapper, wrapper);
53
- if (!wrapper)
54
- rb_raise(rb_eTypeError, "groonga logger is NULL");
55
-
56
- return wrapper;
57
- }
58
-
59
- grn_logger_info *
60
- rb_grn_logger_from_ruby_object (VALUE object)
61
- {
62
- rb_grn_logger_info_wrapper *wrapper;
63
-
64
- wrapper = RVAL2GRNWRAPPER(object);
65
- if (!wrapper)
66
- return NULL;
67
-
68
- return wrapper->logger;
69
- }
70
-
71
- static void
72
- rb_grn_logger_free (void *object)
73
- {
74
- rb_grn_logger_info_wrapper *wrapper = object;
75
-
76
- xfree(wrapper->logger);
77
- xfree(wrapper);
78
- }
79
-
80
- static VALUE
81
- rb_grn_logger_alloc (VALUE klass)
82
- {
83
- return Data_Wrap_Struct(klass, NULL, rb_grn_logger_free, NULL);
84
- }
85
-
86
- static grn_log_level
87
- rb_grn_log_level_from_ruby_object (VALUE rb_level)
88
- {
89
- grn_log_level level = GRN_LOG_NONE;
90
-
91
- if (NIL_P(rb_level)) {
92
- level = GRN_LOG_DEFAULT_LEVEL;
93
- } else if (rb_grn_equal_option(rb_level, "none")) {
94
- level = GRN_LOG_NONE;
95
- } else if (rb_grn_equal_option(rb_level, "emergency")) {
96
- level = GRN_LOG_EMERG;
97
- } else if (rb_grn_equal_option(rb_level, "alert")) {
98
- level = GRN_LOG_ALERT;
99
- } else if (rb_grn_equal_option(rb_level, "critical")) {
100
- level = GRN_LOG_CRIT;
101
- } else if (rb_grn_equal_option(rb_level, "error")) {
102
- level = GRN_LOG_ERROR;
103
- } else if (rb_grn_equal_option(rb_level, "warning")) {
104
- level = GRN_LOG_WARNING;
105
- } else if (rb_grn_equal_option(rb_level, "notice")) {
106
- level = GRN_LOG_NOTICE;
107
- } else if (rb_grn_equal_option(rb_level, "info")) {
108
- level = GRN_LOG_INFO;
109
- } else if (rb_grn_equal_option(rb_level, "debug")) {
110
- level = GRN_LOG_DEBUG;
111
- } else if (rb_grn_equal_option(rb_level, "dump")) {
112
- level = GRN_LOG_DUMP;
113
- } else {
114
- rb_raise(rb_eArgError,
115
- "log level should be one of "
116
- "[nil, :none, :emergency, :alert, :critical, :error, "
117
- ":warning, :notice, :info, :debug, :dump]: %s",
118
- rb_grn_inspect(rb_level));
119
- }
120
-
121
- return level;
122
- }
123
-
124
- static VALUE
125
- rb_grn_log_level_to_ruby_object (grn_log_level level)
126
- {
127
- VALUE rb_level = Qnil;
128
-
129
- switch (level) {
130
- case GRN_LOG_NONE:
131
- rb_level = RB_GRN_INTERN("none");
132
- break;
133
- case GRN_LOG_EMERG:
134
- rb_level = RB_GRN_INTERN("emergency");
135
- break;
136
- case GRN_LOG_ALERT:
137
- rb_level = RB_GRN_INTERN("alert");
138
- break;
139
- case GRN_LOG_CRIT:
140
- rb_level = RB_GRN_INTERN("critical");
141
- break;
142
- case GRN_LOG_ERROR:
143
- rb_level = RB_GRN_INTERN("error");
144
- break;
145
- case GRN_LOG_WARNING:
146
- rb_level = RB_GRN_INTERN("warning");
147
- break;
148
- case GRN_LOG_NOTICE:
149
- rb_level = RB_GRN_INTERN("notice");
150
- break;
151
- case GRN_LOG_INFO:
152
- rb_level = RB_GRN_INTERN("info");
153
- break;
154
- case GRN_LOG_DEBUG:
155
- rb_level = RB_GRN_INTERN("debug");
156
- break;
157
- case GRN_LOG_DUMP:
158
- rb_level = RB_GRN_INTERN("dump");
159
- break;
160
- default:
161
- rb_level = INT2NUM(level);
162
- break;
163
- }
164
-
165
- return rb_level;
166
- }
167
-
168
- static void
169
- rb_grn_log (int level, const char *time, const char *title,
170
- const char *message, const char *location, void *func_arg)
171
- {
172
- rb_grn_logger_info_wrapper *wrapper = func_arg;
173
-
174
- rb_funcall(wrapper->handler, rb_intern("call"), 5,
175
- GRNLOGLEVEL2RVAL(level),
176
- rb_str_new2(time),
177
- rb_str_new2(title),
178
- rb_str_new2(message),
179
- rb_str_new2(location));
180
- }
181
-
182
- static void
183
- rb_grn_logger_set_handler (VALUE self, VALUE rb_handler)
184
- {
185
- rb_grn_logger_info_wrapper *wrapper;
186
- grn_logger_info *logger;
187
-
188
- wrapper = RVAL2GRNWRAPPER(self);
189
- wrapper->handler = rb_handler;
190
- rb_iv_set(self, "@handler", rb_handler);
191
-
192
- logger = wrapper->logger;
193
- if (NIL_P(rb_handler)) {
194
- logger->func = NULL;
195
- logger->func_arg = NULL;
196
- } else {
197
- logger->func = rb_grn_log;
198
- logger->func_arg = wrapper;
199
- }
200
- }
201
-
202
- static VALUE
203
- rb_grn_logger_initialize (int argc, VALUE *argv, VALUE self)
204
- {
205
- rb_grn_logger_info_wrapper *wrapper;
206
- grn_logger_info *logger;
207
- grn_log_level level;
208
- int flags = 0;
209
- VALUE options, rb_level, rb_time, rb_title, rb_message, rb_location;
210
- VALUE rb_handler;
211
-
212
- rb_scan_args(argc, argv, "01&", &options, &rb_handler);
213
-
214
- rb_grn_scan_options(options,
215
- "level", &rb_level,
216
- "time", &rb_time,
217
- "title", &rb_title,
218
- "message", &rb_message,
219
- "location", &rb_location,
220
- NULL);
221
-
222
- level = RVAL2GRNLOGLEVEL(rb_level);
223
-
224
- if (NIL_P(rb_time) || RVAL2CBOOL(rb_time))
225
- flags |= GRN_LOG_TIME;
226
- if (NIL_P(rb_title) || RVAL2CBOOL(rb_title))
227
- flags |= GRN_LOG_TITLE;
228
- if (NIL_P(rb_message) || RVAL2CBOOL(rb_message))
229
- flags |= GRN_LOG_MESSAGE;
230
- if (NIL_P(rb_location) || RVAL2CBOOL(rb_location))
231
- flags |= GRN_LOG_LOCATION;
232
-
233
- wrapper = ALLOC(rb_grn_logger_info_wrapper);
234
- logger = ALLOC(grn_logger_info);
235
- wrapper->logger = logger;
236
- DATA_PTR(self) = wrapper;
237
-
238
- logger->max_level = level;
239
- logger->flags = flags;
240
- rb_grn_logger_set_handler(self, rb_handler);
241
-
242
- return Qnil;
243
- }
244
-
245
- /*
246
- * call-seq:
247
- * Groonga::Logger.register(options={})
248
- {|level, time, title, message, location| ...}
249
- *
250
- * groongaがログを出力する度に呼び出されるブロックを登録す
251
- * る。
252
- *
253
- * ブロックに渡されてくる引数は_level_, _time_, _title_,
254
- * _message_, _location_の5つで、_level_はSymbol、それ以外は
255
- * 全て文字列で渡される。その4つについては_options_で+false+
256
- * を指定することでブロックに渡さないようにすることができ、
257
- * その場合は空文字列が実際には渡される。
258
- *
259
- * _options_に指定可能な値は以下の通り。
260
- *
261
- * [+:level+]
262
- * ログのレベルを+:none+, +:emergency+, +:alert+,
263
- * +:critical+, +:error+, +:warning+, +:notice+, +:info+,
264
- * +:debug+, +:dump+のいずれかで指定する。それより重要度が
265
- * 低いログはブロックに渡されなくなる。デフォルトでは
266
- * +:notice+。
267
- *
268
- * [+:time+]
269
- * ログが出力された時間をブロックに渡したいなら+true+を指
270
- * 定する。デフォルトでは渡す。
271
- *
272
- * [+:title+]
273
- * ログのタイトルをブロックに渡したいなら+true+を指定す
274
- * る。デフォルトでは渡す。(FIXME: groongaで実装されてい
275
- * ない?)
276
- *
277
- * [+:message+]
278
- * ログのメッセージをブロックに渡したいなら+true+を指定す
279
- * る。デフォルトでは渡す。
280
- *
281
- * [+:location+]
282
- * ログの発生元のプロセスIDとgroongaのソースコードのファイ
283
- * ル名、行番号、関数名をブロックに渡したいなら+true+を指
284
- * 定する。デフォルトでは渡す。
285
- */
286
- static VALUE
287
- rb_grn_logger_s_register (int argc, VALUE *argv, VALUE klass)
288
- {
289
- VALUE logger;
290
- grn_rc rc;
291
-
292
- logger = rb_funcall2(klass, rb_intern("new"), argc, argv);
293
- rb_grn_logger_set_handler(logger, rb_block_proc());
294
- rc = grn_logger_info_set(NULL, RVAL2GRNLOGGER(logger));
295
- rb_grn_rc_check(rc, logger);
296
- rb_cv_set(klass, "@@current_logger", logger);
297
-
298
- return Qnil;
299
- }
300
-
301
- static void
302
- rb_grn_logger_reset (VALUE klass)
303
- {
304
- VALUE current_logger;
305
-
306
- current_logger = rb_cv_get(klass, "@@current_logger");
307
- if (NIL_P(current_logger))
308
- return;
309
-
310
- grn_logger_info_set(NULL, NULL);
311
- }
312
-
313
- void
314
- rb_grn_init_logger (VALUE mGrn)
315
- {
316
- cGrnLogger = rb_define_class_under(mGrn, "Logger", rb_cObject);
317
- rb_define_alloc_func(cGrnLogger, rb_grn_logger_alloc);
318
-
319
- rb_cv_set(cGrnLogger, "@@current_logger", Qnil);
320
- rb_define_singleton_method(cGrnLogger, "register",
321
- rb_grn_logger_s_register, -1);
322
- rb_set_end_proc(rb_grn_logger_reset, cGrnLogger);
323
-
324
- rb_define_method(cGrnLogger, "initialize", rb_grn_logger_initialize, -1);
325
- }
data/ext/rb-grn-object.c DELETED
@@ -1,1335 +0,0 @@
1
- /* -*- c-file-style: "ruby" -*- */
2
- /*
3
- Copyright (C) 2009-2010 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
- /*
20
- * Document-class: Groonga::Object
21
- *
22
- * Ruby/groongaが提供するクラスのベースとなるクラス。
23
- * Groonga::ContextとGroonga::Logger以外はGroonga::Objectを継
24
- * 承している。
25
- */
26
-
27
- #include "rb-grn.h"
28
-
29
- #define SELF(object) ((RbGrnObject *)DATA_PTR(object))
30
-
31
- VALUE rb_cGrnObject;
32
-
33
- grn_obj *
34
- rb_grn_object_from_ruby_object (VALUE object, grn_ctx **context)
35
- {
36
- RbGrnObject *rb_grn_object;
37
-
38
- if (NIL_P(object))
39
- return NULL;
40
-
41
- if (context && *context) {
42
- grn_obj *grn_object;
43
- if (RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cString))) {
44
- const char *name;
45
- unsigned int name_size;
46
-
47
- name = StringValuePtr(object);
48
- name_size = RSTRING_LEN(object);
49
- grn_object = rb_grn_context_get_backward_compatibility(*context,
50
- name,
51
- name_size);
52
- if (!grn_object)
53
- rb_raise(rb_eArgError,
54
- "unregistered groonga object: name: <%s>",
55
- rb_grn_inspect(object));
56
- return grn_object;
57
- } else if (RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cInteger))) {
58
- grn_object = grn_ctx_at(*context, NUM2UINT(object));
59
- if (!grn_object)
60
- rb_raise(rb_eArgError,
61
- "unregistered groonga object: ID: <%s>",
62
- rb_grn_inspect(object));
63
- return grn_object;
64
- }
65
- }
66
-
67
- if (!RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cGrnObject))) {
68
- rb_raise(rb_eTypeError, "not a groonga object: <%s>",
69
- rb_grn_inspect(object));
70
- }
71
-
72
- Data_Get_Struct(object, RbGrnObject, rb_grn_object);
73
- if (!rb_grn_object)
74
- rb_raise(rb_eGrnError, "groonga object is NULL");
75
-
76
- if (context && !*context)
77
- *context = rb_grn_object->context;
78
-
79
- return rb_grn_object->object;
80
- }
81
-
82
- static grn_obj *
83
- rb_grn_object_finalizer (grn_ctx *context, int n_args, grn_obj **grn_objects,
84
- grn_user_data *user_data)
85
- {
86
- RbGrnObject *rb_grn_object;
87
- grn_obj *grn_object = *grn_objects;
88
-
89
- if (rb_grn_exited)
90
- return NULL;
91
-
92
- rb_grn_object = user_data->ptr;
93
-
94
- grn_obj_user_data(context, grn_object)->ptr = NULL;
95
- grn_obj_set_finalizer(context, grn_object, NULL);
96
-
97
- debug("finalize: %p:%p:%p:%p:%p 0x%x\n",
98
- context, grn_object, rb_grn_object,
99
- rb_grn_object->context, rb_grn_object->object,
100
- grn_object->header.type);
101
-
102
- rb_grn_object->context = NULL;
103
- rb_grn_object->object = NULL;
104
-
105
- switch (grn_object->header.type) {
106
- case GRN_DB:
107
- grn_ctx_use(context, NULL);
108
- break;
109
- case GRN_TYPE:
110
- case GRN_PROC:
111
- case GRN_CURSOR_TABLE_HASH_KEY:
112
- case GRN_CURSOR_TABLE_PAT_KEY:
113
- case GRN_CURSOR_TABLE_NO_KEY:
114
- break;
115
- case GRN_TABLE_HASH_KEY:
116
- case GRN_TABLE_PAT_KEY:
117
- rb_grn_table_key_support_finalizer(context, grn_object,
118
- RB_GRN_TABLE_KEY_SUPPORT(rb_grn_object));
119
- break;
120
- case GRN_TABLE_NO_KEY:
121
- rb_grn_table_finalizer(context, grn_object,
122
- RB_GRN_TABLE(rb_grn_object));
123
- break;
124
- case GRN_COLUMN_FIX_SIZE:
125
- case GRN_COLUMN_VAR_SIZE:
126
- rb_grn_column_finalizer(context, grn_object,
127
- RB_GRN_COLUMN(rb_grn_object));
128
- break;
129
- case GRN_COLUMN_INDEX:
130
- rb_grn_index_column_finalizer(context, grn_object,
131
- RB_GRN_INDEX_COLUMN(rb_grn_object));
132
- break;
133
- case GRN_ACCESSOR:
134
- rb_grn_named_object_finalizer(context, grn_object,
135
- RB_GRN_NAMED_OBJECT(rb_grn_object));
136
- break;
137
- case GRN_EXPR:
138
- rb_grn_expression_finalizer(context, grn_object,
139
- RB_GRN_EXPRESSION(rb_grn_object));
140
- break;
141
- default:
142
- rb_raise(rb_eTypeError,
143
- "unsupported groonga object type for finalizer: 0x%x",
144
- grn_object->header.type);
145
- break;
146
- }
147
-
148
- return NULL;
149
- }
150
-
151
- void
152
- rb_grn_object_free (RbGrnObject *rb_grn_object)
153
- {
154
- grn_ctx *context;
155
- grn_obj *grn_object;
156
-
157
- context = rb_grn_object->context;
158
- grn_object = rb_grn_object->object;
159
- debug("rb-free: %p:%p:%p\n", context, grn_object, rb_grn_object);
160
- if (!rb_grn_exited && context && grn_object) {
161
- rb_grn_object->context = NULL;
162
- rb_grn_object->object = NULL;
163
- debug("type: %x\n", grn_object->header.type);
164
- if (rb_grn_object->need_close) {
165
- grn_obj_unlink(context, grn_object);
166
- }
167
- }
168
- xfree(rb_grn_object);
169
- }
170
-
171
- VALUE
172
- rb_grn_object_to_ruby_class (grn_obj *object)
173
- {
174
- VALUE klass = Qnil;
175
-
176
- switch (object->header.type) {
177
- case GRN_DB:
178
- klass = rb_cGrnDatabase;
179
- break;
180
- case GRN_TABLE_HASH_KEY:
181
- klass = rb_cGrnHash;
182
- break;
183
- case GRN_TABLE_PAT_KEY:
184
- klass = rb_cGrnPatriciaTrie;
185
- break;
186
- case GRN_TABLE_NO_KEY:
187
- klass = rb_cGrnArray;
188
- break;
189
- case GRN_TYPE:
190
- klass = rb_cGrnType;
191
- break;
192
- case GRN_ACCESSOR:
193
- klass = rb_cGrnAccessor;
194
- break;
195
- case GRN_PROC:
196
- klass = rb_cGrnProcedure;
197
- break;
198
- case GRN_COLUMN_FIX_SIZE:
199
- klass = rb_cGrnFixSizeColumn;
200
- break;
201
- case GRN_COLUMN_VAR_SIZE:
202
- klass = rb_cGrnVariableSizeColumn;
203
- break;
204
- case GRN_COLUMN_INDEX:
205
- klass = rb_cGrnIndexColumn;
206
- break;
207
- case GRN_EXPR:
208
- klass = rb_cGrnExpression;
209
- break;
210
- case GRN_CURSOR_TABLE_HASH_KEY:
211
- klass = rb_cGrnHashCursor;
212
- break;
213
- case GRN_CURSOR_TABLE_PAT_KEY:
214
- klass = rb_cGrnPatriciaTrieCursor;
215
- break;
216
- case GRN_CURSOR_TABLE_NO_KEY:
217
- klass = rb_cGrnArrayCursor;
218
- break;
219
- default:
220
- rb_raise(rb_eTypeError,
221
- "unsupported groonga object type for class detection: 0x%x",
222
- object->header.type);
223
- break;
224
- }
225
-
226
- return klass;
227
- }
228
-
229
- VALUE
230
- rb_grn_object_to_ruby_object (VALUE klass, grn_ctx *context, grn_obj *object,
231
- rb_grn_boolean owner)
232
- {
233
- RbGrnContext *rb_grn_context;
234
- VALUE rb_object, rb_context = Qnil;
235
- grn_user_data *user_data;
236
-
237
- if (!object)
238
- return Qnil;
239
-
240
- user_data = grn_obj_user_data(context, object);
241
- if (user_data && user_data->ptr) {
242
- return RB_GRN_OBJECT(user_data->ptr)->self;
243
- }
244
-
245
- if (NIL_P(klass))
246
- klass = GRNOBJECT2RCLASS(object);
247
-
248
- rb_grn_context = GRN_CTX_USER_DATA(context)->ptr;
249
- if (rb_grn_context)
250
- rb_context = rb_grn_context->self;
251
- rb_object = rb_obj_alloc(klass);
252
- rb_grn_object_assign(klass, rb_object, rb_context, context, object);
253
-
254
- return rb_object;
255
- }
256
-
257
- VALUE
258
- rb_grn_object_alloc (VALUE klass)
259
- {
260
- return Data_Wrap_Struct(klass, NULL, rb_grn_object_free, NULL);
261
- }
262
-
263
- static void
264
- rb_grn_object_bind_common (VALUE klass, VALUE self, VALUE rb_context,
265
- RbGrnObject *rb_grn_object,
266
- grn_ctx *context, grn_obj *object)
267
- {
268
- rb_grn_object->context = context;
269
- rb_grn_object->object = object;
270
- rb_grn_object->self = self;
271
- rb_grn_object->need_close = RB_GRN_TRUE;
272
-
273
- switch (object->header.type) {
274
- case GRN_DB:
275
- case GRN_CURSOR_TABLE_HASH_KEY:
276
- case GRN_CURSOR_TABLE_PAT_KEY:
277
- case GRN_CURSOR_TABLE_NO_KEY:
278
- case GRN_TABLE_HASH_KEY:
279
- case GRN_TABLE_PAT_KEY:
280
- case GRN_TABLE_NO_KEY:
281
- case GRN_COLUMN_FIX_SIZE:
282
- case GRN_COLUMN_VAR_SIZE:
283
- case GRN_COLUMN_INDEX:
284
- case GRN_EXPR:
285
- grn_obj_user_data(context, object)->ptr = rb_grn_object;
286
- grn_obj_set_finalizer(context, object, rb_grn_object_finalizer);
287
- break;
288
- case GRN_PROC:
289
- case GRN_TYPE:
290
- rb_grn_object->need_close = RB_GRN_FALSE;
291
- break;
292
- default:
293
- if (klass == rb_cGrnVariable)
294
- rb_grn_object->need_close = RB_GRN_FALSE;
295
- break;
296
- }
297
-
298
- rb_grn_object->domain_id = GRN_ID_NIL;
299
- if (object)
300
- rb_grn_object->domain_id = object->header.domain;
301
- if (rb_grn_object->domain_id == GRN_ID_NIL)
302
- rb_grn_object->domain = NULL;
303
- else
304
- rb_grn_object->domain = grn_ctx_at(context, rb_grn_object->domain_id);
305
-
306
- rb_grn_object->range_id = GRN_ID_NIL;
307
- if (object && object->header.type != GRN_TYPE)
308
- rb_grn_object->range_id = grn_obj_get_range(context, object);
309
- if (rb_grn_object->range_id == GRN_ID_NIL)
310
- rb_grn_object->range = NULL;
311
- else
312
- rb_grn_object->range = grn_ctx_at(context, rb_grn_object->range_id);
313
-
314
- DATA_PTR(self) = rb_grn_object;
315
- rb_iv_set(self, "@context", rb_context);
316
- }
317
-
318
- void
319
- rb_grn_object_assign (VALUE klass, VALUE self, VALUE rb_context,
320
- grn_ctx *context, grn_obj *object)
321
- {
322
- void *rb_grn_object;
323
-
324
- if (!object)
325
- return;
326
-
327
- if (NIL_P(klass))
328
- klass = rb_obj_class(self);
329
-
330
- if (klass == rb_cGrnDatabase ||
331
- (RVAL2CBOOL(rb_obj_is_kind_of(self, rb_cGrnType))) ||
332
- klass == rb_cGrnHashCursor ||
333
- klass == rb_cGrnPatriciaTrieCursor ||
334
- klass == rb_cGrnArrayCursor ||
335
- klass == rb_cGrnProcedure ||
336
- klass == rb_cGrnVariable) {
337
- rb_grn_object = ALLOC(RbGrnObject);
338
- rb_grn_object_bind_common(klass, self, rb_context, rb_grn_object,
339
- context, object);
340
- } else if (RVAL2CBOOL(rb_obj_is_kind_of(self, rb_mGrnTableKeySupport))) {
341
- rb_grn_object = ALLOC(RbGrnTableKeySupport);
342
- rb_grn_object_bind_common(klass, self, rb_context, rb_grn_object,
343
- context, object);
344
- rb_grn_table_key_support_bind(RB_GRN_TABLE_KEY_SUPPORT(rb_grn_object),
345
- context, object);
346
- } else if (RVAL2CBOOL(rb_obj_is_kind_of(self, rb_cGrnTable))) {
347
- rb_grn_object = ALLOC(RbGrnTable);
348
- rb_grn_object_bind_common(klass, self, rb_context, rb_grn_object,
349
- context, object);
350
- rb_grn_table_bind(RB_GRN_TABLE(rb_grn_object), context, object);
351
- } else if (RVAL2CBOOL(rb_obj_is_kind_of(self, rb_cGrnIndexColumn))) {
352
- rb_grn_object = ALLOC(RbGrnIndexColumn);
353
- rb_grn_object_bind_common(klass, self, rb_context, rb_grn_object,
354
- context, object);
355
- rb_grn_index_column_bind(RB_GRN_INDEX_COLUMN(rb_grn_object),
356
- context, object);
357
- } else if (RVAL2CBOOL(rb_obj_is_kind_of(self, rb_cGrnColumn))) {
358
- rb_grn_object = ALLOC(RbGrnColumn);
359
- rb_grn_object_bind_common(klass, self, rb_context, rb_grn_object,
360
- context, object);
361
- rb_grn_column_bind(RB_GRN_COLUMN(rb_grn_object), context, object);
362
- } else if (klass == rb_cGrnAccessor) {
363
- rb_grn_object = ALLOC(RbGrnNamedObject);
364
- rb_grn_object_bind_common(klass, self, rb_context, rb_grn_object,
365
- context, object);
366
- rb_grn_named_object_bind(RB_GRN_NAMED_OBJECT(rb_grn_object),
367
- context, object);
368
- } else if (klass == rb_cGrnExpression) {
369
- rb_grn_object = ALLOC(RbGrnExpression);
370
- rb_grn_object_bind_common(klass, self, rb_context, rb_grn_object,
371
- context, object);
372
- rb_grn_expression_bind(RB_GRN_EXPRESSION(rb_grn_object),
373
- context, object);
374
- } else {
375
- rb_raise(rb_eTypeError,
376
- "unsupported groonga object type for assignment: 0x%x",
377
- object->header.type);
378
- }
379
-
380
- debug("assign: %p:%p:%p 0x%x\n", context, object, rb_grn_object,
381
- object->header.type);
382
- }
383
-
384
- void
385
- rb_grn_named_object_bind (RbGrnNamedObject *rb_grn_named_object,
386
- grn_ctx *context, grn_obj *object)
387
- {
388
- RbGrnObject *rb_grn_object;
389
-
390
- rb_grn_object = RB_GRN_OBJECT(rb_grn_named_object);
391
-
392
- rb_grn_named_object->name = NULL;
393
- rb_grn_named_object->name_size = 0;
394
- }
395
-
396
- void
397
- rb_grn_named_object_finalizer (grn_ctx *context, grn_obj *grn_object,
398
- RbGrnNamedObject *rb_grn_named_object)
399
- {
400
- if (rb_grn_named_object->name)
401
- free(rb_grn_named_object->name);
402
- rb_grn_named_object->name = NULL;
403
- rb_grn_named_object->name_size = 0;
404
- }
405
-
406
- void
407
- rb_grn_named_object_set_name (RbGrnNamedObject *rb_grn_named_object,
408
- const char *name, unsigned name_size)
409
- {
410
- if (rb_grn_named_object->name) {
411
- free(rb_grn_named_object->name);
412
- rb_grn_named_object->name = NULL;
413
- }
414
- if (name_size > 0) {
415
- rb_grn_named_object->name = strndup(name, name_size);
416
- }
417
- rb_grn_named_object->name_size = name_size;
418
- }
419
-
420
-
421
- void
422
- rb_grn_object_deconstruct (RbGrnObject *rb_grn_object,
423
- grn_obj **object,
424
- grn_ctx **context,
425
- grn_id *domain_id,
426
- grn_obj **domain,
427
- grn_id *range_id,
428
- grn_obj **range)
429
- {
430
- if (!rb_grn_object)
431
- return;
432
-
433
- if (!rb_grn_object->object) {
434
- rb_raise(rb_eGrnObjectClosed,
435
- "can't access already closed groonga object: %s",
436
- rb_grn_inspect(CLASS_OF(rb_grn_object->self)));
437
- }
438
-
439
- if (object)
440
- *object = rb_grn_object->object;
441
- if (context)
442
- *context = rb_grn_object->context;
443
- if (domain_id)
444
- *domain_id = rb_grn_object->domain_id;
445
- if (domain)
446
- *domain = rb_grn_object->domain;
447
- if (range_id)
448
- *range_id = rb_grn_object->range_id;
449
- if (range)
450
- *range = rb_grn_object->range;
451
- }
452
-
453
- /*
454
- * Document-method: close
455
- *
456
- * call-seq:
457
- * object.close
458
- *
459
- * _object_が使用しているリソースを開放する。これ以降_object_を
460
- * 使うことはできない。
461
- */
462
- VALUE
463
- rb_grn_object_close (VALUE self)
464
- {
465
- grn_obj *object;
466
- grn_ctx *context;
467
-
468
- rb_grn_object_deconstruct(SELF(self), &object, &context,
469
- NULL, NULL, NULL, NULL);
470
- if (object && context)
471
- grn_obj_close(context, object);
472
- return Qnil;
473
- }
474
-
475
- /*
476
- * Document-method: closed?
477
- *
478
- * call-seq:
479
- * object.closed? -> true/false
480
- *
481
- * _object_が開放済みの場合は+true+を返し、そうでない場合は
482
- * +false+を返す。
483
- */
484
- VALUE
485
- rb_grn_object_closed_p (VALUE self)
486
- {
487
- RbGrnObject *rb_grn_object;
488
-
489
- rb_grn_object = SELF(self);
490
- if (rb_grn_object->context && rb_grn_object->object) {
491
- return Qfalse;
492
- } else {
493
- return Qtrue;
494
- }
495
- }
496
-
497
- VALUE
498
- rb_grn_object_inspect_object (VALUE inspected, grn_ctx *context, grn_obj *object)
499
- {
500
- VALUE rb_object;
501
-
502
- rb_object = GRNOBJECT2RVAL(Qnil, context, object, RB_GRN_FALSE);
503
- rb_str_concat(inspected, rb_inspect(rb_object));
504
-
505
- return inspected;
506
- }
507
-
508
- VALUE
509
- rb_grn_object_inspect_header (VALUE self, VALUE inspected)
510
- {
511
- rb_str_cat2(inspected, "#<");
512
- rb_str_concat(inspected, rb_inspect(rb_obj_class(self)));
513
-
514
- return inspected;
515
- }
516
-
517
- static VALUE
518
- rb_grn_object_inspect_content_id_with_label (VALUE inspected,
519
- grn_ctx *context, grn_obj *object)
520
- {
521
- grn_id id;
522
-
523
- rb_str_cat2(inspected, "id: <");
524
- id = grn_obj_id(context, object);
525
- if (id == GRN_ID_NIL)
526
- rb_str_cat2(inspected, "nil");
527
- else
528
- rb_str_concat(inspected, rb_obj_as_string(UINT2NUM(id)));
529
- rb_str_cat2(inspected, ">");
530
-
531
- return inspected;
532
- }
533
-
534
- static VALUE
535
- rb_grn_object_inspect_content_name (VALUE inspected,
536
- grn_ctx *context, grn_obj *object)
537
- {
538
- int name_size;
539
-
540
- name_size = grn_obj_name(context, object, NULL, 0);
541
- if (name_size == 0) {
542
- rb_str_cat2(inspected, "(anonymous)");
543
- } else {
544
- grn_obj name;
545
-
546
- GRN_OBJ_INIT(&name, GRN_BULK, 0, GRN_ID_NIL);
547
- grn_bulk_space(context, &name, name_size);
548
- grn_obj_name(context, object, GRN_BULK_HEAD(&name), name_size);
549
- GRN_TEXT_PUTC(context, &name, '\0');
550
- rb_str_cat2(inspected, "<");
551
- rb_str_cat2(inspected, GRN_BULK_HEAD(&name));
552
- rb_str_cat2(inspected, ">");
553
- grn_obj_close(context, &name);
554
- }
555
-
556
- return inspected;
557
- }
558
-
559
- static VALUE
560
- rb_grn_object_inspect_content_name_with_label (VALUE inspected,
561
- grn_ctx *context, grn_obj *object)
562
- {
563
-
564
- rb_str_cat2(inspected, "name: ");
565
- rb_grn_object_inspect_content_name(inspected, context, object);
566
- return inspected;
567
- }
568
-
569
- static VALUE
570
- rb_grn_object_inspect_content_path_with_label (VALUE inspected,
571
- grn_ctx *context, grn_obj *object)
572
- {
573
- const char *path;
574
-
575
- rb_str_cat2(inspected, "path: ");
576
- path = grn_obj_path(context, object);
577
- if (path) {
578
- rb_str_cat2(inspected, "<");
579
- rb_str_cat2(inspected, path);
580
- rb_str_cat2(inspected, ">");
581
- } else {
582
- rb_str_cat2(inspected, "(temporary)");
583
- }
584
-
585
- return inspected;
586
- }
587
-
588
- static VALUE
589
- rb_grn_object_inspect_content_domain_with_label (VALUE inspected,
590
- grn_ctx *context,
591
- grn_obj *object)
592
- {
593
- grn_id domain;
594
-
595
- rb_str_cat2(inspected, "domain: ");
596
- domain = object->header.domain;
597
- if (domain == GRN_ID_NIL) {
598
- rb_str_cat2(inspected, "(nil)");
599
- } else {
600
- grn_obj *domain_object;
601
-
602
- domain_object = grn_ctx_at(context, domain);
603
- if (domain_object) {
604
- if (domain_object == object) {
605
- rb_str_cat2(inspected, "(self)");
606
- } else {
607
- rb_grn_object_inspect_content_name(inspected,
608
- context, domain_object);
609
- }
610
- } else {
611
- rb_str_cat2(inspected, "(");
612
- rb_str_concat(inspected, rb_obj_as_string(UINT2NUM(domain)));
613
- rb_str_cat2(inspected, ")");
614
- }
615
- }
616
-
617
- return inspected;
618
- }
619
-
620
- static VALUE
621
- rb_grn_object_inspect_content_range_with_label (VALUE inspected,
622
- grn_ctx *context,
623
- grn_obj *object)
624
- {
625
- grn_id range;
626
-
627
- rb_str_cat2(inspected, "range: ");
628
-
629
- range = grn_obj_get_range(context, object);
630
- switch (object->header.type) {
631
- case GRN_TYPE:
632
- rb_str_cat2(inspected, "<");
633
- rb_str_concat(inspected, rb_inspect(UINT2NUM(range)));
634
- rb_str_cat2(inspected, ">");
635
- break;
636
- default:
637
- if (range == GRN_ID_NIL) {
638
- rb_str_cat2(inspected, "(nil)");
639
- } else {
640
- grn_obj *range_object;
641
-
642
- range_object = grn_ctx_at(context, range);
643
- if (range_object) {
644
- if (range_object == object) {
645
- rb_str_cat2(inspected, "(self)");
646
- } else {
647
- rb_grn_object_inspect_content_name(inspected,
648
- context, range_object);
649
- }
650
- } else {
651
- rb_str_cat2(inspected, "(");
652
- rb_str_concat(inspected, rb_obj_as_string(UINT2NUM(range)));
653
- rb_str_cat2(inspected, ")");
654
- }
655
- }
656
- }
657
-
658
- return inspected;
659
- }
660
-
661
- static VALUE
662
- rb_grn_object_inspect_content_flags_with_label (VALUE inspected,
663
- grn_ctx *context,
664
- grn_obj *object)
665
- {
666
- grn_obj_flags flags;
667
- VALUE inspected_flags;
668
-
669
- rb_str_cat2(inspected, "flags: ");
670
-
671
- flags = object->header.flags;
672
-
673
- inspected_flags = rb_ary_new();
674
-
675
- if (0) {
676
- if (flags & GRN_OBJ_TABLE_HASH_KEY)
677
- rb_ary_push(inspected_flags, rb_str_new2("TABLE_HASH_KEY"));
678
- if (flags & GRN_OBJ_TABLE_PAT_KEY)
679
- rb_ary_push(inspected_flags, rb_str_new2("TABLE_PAT_KEY"));
680
- if (flags & GRN_OBJ_TABLE_NO_KEY)
681
- rb_ary_push(inspected_flags, rb_str_new2("TABLE_NO_KEY"));
682
- if (flags & GRN_OBJ_TABLE_VIEW)
683
- rb_ary_push(inspected_flags, rb_str_new2("TABLE_VIEW"));
684
- }
685
-
686
- switch (object->header.type) {
687
- case GRN_COLUMN_FIX_SIZE:
688
- case GRN_COLUMN_VAR_SIZE:
689
- case GRN_TYPE:
690
- if (flags & GRN_OBJ_KEY_UINT)
691
- rb_ary_push(inspected_flags, rb_str_new2("KEY_UINT"));
692
- if (flags & GRN_OBJ_KEY_INT)
693
- rb_ary_push(inspected_flags, rb_str_new2("KEY_INT"));
694
- if (flags & GRN_OBJ_KEY_FLOAT)
695
- rb_ary_push(inspected_flags, rb_str_new2("KEY_FLOAT"));
696
- break;
697
- default:
698
- break;
699
- }
700
-
701
- switch (object->header.type) {
702
- case GRN_TABLE_HASH_KEY:
703
- case GRN_TABLE_PAT_KEY:
704
- if (flags & GRN_OBJ_KEY_WITH_SIS)
705
- rb_ary_push(inspected_flags, rb_str_new2("KEY_WITH_SIS"));
706
- if (flags & GRN_OBJ_KEY_NORMALIZE)
707
- rb_ary_push(inspected_flags, rb_str_new2("KEY_NORMALIZE"));
708
- break;
709
- default:
710
- break;
711
- }
712
-
713
- if (0) {
714
- if (flags & GRN_OBJ_COLUMN_SCALAR)
715
- rb_ary_push(inspected_flags, rb_str_new2("COLUMN_SCALAR"));
716
- if (flags & GRN_OBJ_COLUMN_VECTOR)
717
- rb_ary_push(inspected_flags, rb_str_new2("COLUMN_VECTOR"));
718
- if (flags & GRN_OBJ_COLUMN_INDEX)
719
- rb_ary_push(inspected_flags, rb_str_new2("COLUMN_INDEX"));
720
- }
721
-
722
- switch (object->header.type) {
723
- case GRN_COLUMN_FIX_SIZE:
724
- case GRN_COLUMN_VAR_SIZE:
725
- if (flags & GRN_OBJ_COMPRESS_ZLIB)
726
- rb_ary_push(inspected_flags, rb_str_new2("COMPRESS_ZLIB"));
727
- if (flags & GRN_OBJ_COMPRESS_LZO)
728
- rb_ary_push(inspected_flags, rb_str_new2("COMPRESS_LZO"));
729
- break;
730
- default:
731
- break;
732
- }
733
-
734
- if (flags & GRN_OBJ_WITH_SECTION)
735
- rb_ary_push(inspected_flags, rb_str_new2("WITH_SECTION"));
736
- if (flags & GRN_OBJ_WITH_WEIGHT)
737
- rb_ary_push(inspected_flags, rb_str_new2("WITH_WEIGHT"));
738
- if (flags & GRN_OBJ_WITH_POSITION)
739
- rb_ary_push(inspected_flags, rb_str_new2("WITH_POSITION"));
740
- if (flags & GRN_OBJ_WITH_BUFFER)
741
- rb_ary_push(inspected_flags, rb_str_new2("WITH_BUFFER"));
742
-
743
- if (flags & GRN_OBJ_UNIT_DOCUMENT_SECTION)
744
- rb_ary_push(inspected_flags, rb_str_new2("UNIT_DOCUMENT_SECTION"));
745
- if (flags & GRN_OBJ_UNIT_DOCUMENT_POSITION)
746
- rb_ary_push(inspected_flags, rb_str_new2("UNIT_DOCUMENT_POSITION"));
747
-
748
- if (flags & GRN_OBJ_UNIT_SECTION_POSITION)
749
- rb_ary_push(inspected_flags, rb_str_new2("UNIT_SECTION_POSITION"));
750
-
751
- if (flags & GRN_OBJ_UNIT_USERDEF_DOCUMENT)
752
- rb_ary_push(inspected_flags, rb_str_new2("UNIT_USERDEF_DOCUMENT"));
753
- if (flags & GRN_OBJ_UNIT_USERDEF_SECTION)
754
- rb_ary_push(inspected_flags, rb_str_new2("UNIT_USERDEF_SECTION"));
755
- if (flags & GRN_OBJ_UNIT_USERDEF_POSITION)
756
- rb_ary_push(inspected_flags, rb_str_new2("UNIT_USERDEF_POSITION"));
757
-
758
- if (flags & GRN_OBJ_WITH_SUBREC)
759
- rb_ary_push(inspected_flags, rb_str_new2("WITH_SUBREC"));
760
-
761
- rb_str_cat2(inspected, "<");
762
- rb_str_concat(inspected, rb_ary_join(inspected_flags, rb_str_new2("|")));
763
- rb_str_cat2(inspected, ">");
764
-
765
- return inspected;
766
- }
767
-
768
- VALUE
769
- rb_grn_object_inspect_object_content (VALUE inspected,
770
- grn_ctx *context, grn_obj *object)
771
- {
772
- rb_grn_object_inspect_content_id_with_label(inspected, context, object);
773
- rb_str_cat2(inspected, ", ");
774
- rb_grn_object_inspect_content_name_with_label(inspected, context, object);
775
- rb_str_cat2(inspected, ", ");
776
- rb_grn_object_inspect_content_path_with_label(inspected, context, object);
777
- rb_str_cat2(inspected, ", ");
778
- rb_grn_object_inspect_content_domain_with_label(inspected, context, object);
779
- rb_str_cat2(inspected, ", ");
780
- rb_grn_object_inspect_content_range_with_label(inspected, context, object);
781
- rb_str_cat2(inspected, ", ");
782
- rb_grn_object_inspect_content_flags_with_label(inspected, context, object);
783
-
784
- return inspected;
785
- }
786
-
787
- VALUE
788
- rb_grn_object_inspect_content (VALUE self, VALUE inspected)
789
- {
790
- RbGrnObject *rb_grn_object;
791
- grn_ctx *context;
792
- grn_obj *object;
793
-
794
- rb_grn_object = SELF(self);
795
- if (!rb_grn_object)
796
- return inspected;
797
-
798
- context = rb_grn_object->context;
799
- object = rb_grn_object->object;
800
-
801
- rb_str_cat2(inspected, " ");
802
- if (object) {
803
- rb_grn_object_inspect_object_content(inspected, context, object);
804
- } else {
805
- rb_str_cat2(inspected, "(closed)");
806
- }
807
-
808
- return inspected;
809
- }
810
-
811
- VALUE
812
- rb_grn_object_inspect_footer (VALUE self, VALUE inspected)
813
- {
814
- rb_str_cat2(inspected, ">");
815
-
816
- return inspected;
817
- }
818
-
819
- /*
820
- * Document-method: inspect
821
- *
822
- * call-seq:
823
- * object.inspect -> 詳細情報
824
- *
825
- * _object_の詳細を示した文字列を返す。デバッグ用。
826
- */
827
- static VALUE
828
- rb_grn_object_inspect (VALUE self)
829
- {
830
- VALUE inspected;
831
-
832
- inspected = rb_str_new2("");
833
- rb_grn_object_inspect_header(self, inspected);
834
- rb_grn_object_inspect_content(self, inspected);
835
- rb_grn_object_inspect_footer(self, inspected);
836
-
837
- return inspected;
838
- }
839
-
840
- /*
841
- * Document-method: id
842
- *
843
- * call-seq:
844
- * object.id -> ID/nil
845
- *
846
- * _object_のIDを返す。_object_が#closed?なときやIDがない場合
847
- * は+nil+を返す。
848
- */
849
- VALUE
850
- rb_grn_object_get_id (VALUE self)
851
- {
852
- RbGrnObject *rb_grn_object;
853
- grn_id id;
854
-
855
- rb_grn_object = SELF(self);
856
- if (!rb_grn_object->object)
857
- return Qnil;
858
-
859
- id = grn_obj_id(rb_grn_object->context, rb_grn_object->object);
860
- if (id == GRN_ID_NIL)
861
- return Qnil;
862
- else
863
- return UINT2NUM(id);
864
- }
865
-
866
- /*
867
- * Document-method: path
868
- *
869
- * call-seq:
870
- * object.path -> ファイルパス/nil
871
- *
872
- * _object_に対応するファイルパスを返す。一時_object_
873
- * なら+nil+を返す。
874
- */
875
- static VALUE
876
- rb_grn_object_get_path (VALUE self)
877
- {
878
- RbGrnObject *rb_grn_object;
879
- const char *path;
880
-
881
- rb_grn_object = SELF(self);
882
- if (!rb_grn_object->object)
883
- return Qnil;
884
-
885
- path = grn_obj_path(rb_grn_object->context, rb_grn_object->object);
886
-
887
- if (!path)
888
- return Qnil;
889
- else
890
- return rb_str_new2(path);
891
- }
892
-
893
- /*
894
- * Document-method: temporary?
895
- *
896
- * call-seq:
897
- * object.temporary? -> true/false
898
- *
899
- * _object_が一時オブジェクトなら+true+、永続オブジェクトな
900
- * ら+false+を返す。
901
- */
902
- static VALUE
903
- rb_grn_object_temporary_p (VALUE self)
904
- {
905
- RbGrnObject *rb_grn_object;
906
-
907
- rb_grn_object = SELF(self);
908
- if (!rb_grn_object->object)
909
- return Qnil;
910
-
911
- return !(rb_grn_object->object->header.flags & GRN_OBJ_PERSISTENT);
912
- }
913
-
914
- /*
915
- * Document-method: persistent?
916
- *
917
- * call-seq:
918
- * object.persistent? -> true/false
919
- *
920
- * _object_が永続オブジェクトなら+true+、一時オブジェクトな
921
- * ら+false+を返す。
922
- */
923
- static VALUE
924
- rb_grn_object_persistent_p (VALUE self)
925
- {
926
- RbGrnObject *rb_grn_object;
927
-
928
- rb_grn_object = SELF(self);
929
- if (!rb_grn_object->object)
930
- return Qnil;
931
-
932
- return rb_grn_object->object->header.flags & GRN_OBJ_PERSISTENT;
933
- }
934
-
935
- /*
936
- * Document-method: domain
937
- *
938
- * call-seq:
939
- * object.domain -> Groonga::Object/nil
940
- *
941
- * _object_の属しているGroonga::Objectを返す。例えば、
942
- * Groonga::ColumnはGroonga::Tableを返す。属している
943
- * Groonga::Objectがない場合は+nil+を返す。
944
- */
945
- static VALUE
946
- rb_grn_object_get_domain (VALUE self)
947
- {
948
- RbGrnObject *rb_grn_object;
949
- grn_ctx *context;
950
- grn_obj *object;
951
- grn_id domain;
952
-
953
- rb_grn_object = SELF(self);
954
- object = rb_grn_object->object;
955
- if (!object)
956
- return Qnil;
957
-
958
- context = rb_grn_object->context;
959
- domain = object->header.domain;
960
- if (domain == GRN_ID_NIL) {
961
- return Qnil;
962
- } else {
963
- grn_obj *domain_object;
964
-
965
- domain_object = grn_ctx_at(context, domain);
966
- if (domain_object)
967
- return GRNOBJECT2RVAL(Qnil, context, domain_object, RB_GRN_FALSE);
968
- else
969
- return UINT2NUM(domain);
970
- }
971
- }
972
-
973
- /*
974
- * Document-method: name
975
- *
976
- * call-seq:
977
- * object.name -> 名前/nil
978
- *
979
- * _object_の名前を返す。無名オブジェクトの場合は+nil+を返す。
980
- */
981
- static VALUE
982
- rb_grn_object_get_name (VALUE self)
983
- {
984
- RbGrnObject *rb_grn_object;
985
- VALUE rb_name;
986
- int name_size;
987
-
988
- rb_grn_object = SELF(self);
989
- if (!rb_grn_object->object)
990
- return Qnil;
991
-
992
- name_size = grn_obj_name(rb_grn_object->context, rb_grn_object->object,
993
- NULL, 0);
994
- if (name_size == 0)
995
- return Qnil;
996
-
997
- rb_name = rb_str_buf_new(name_size);
998
- rb_str_set_len(rb_name, name_size);
999
- grn_obj_name(rb_grn_object->context, rb_grn_object->object,
1000
- RSTRING_PTR(rb_name), name_size);
1001
- return rb_name;
1002
- }
1003
-
1004
- /*
1005
- * Document-method: range
1006
- *
1007
- * call-seq:
1008
- * object.range -> Groonga::Object/nil
1009
- *
1010
- * _object_の値がとりうる範囲を示したGroonga::Objectを返す。
1011
- * 例えば、Groonga::Columnの場合は
1012
- * Groonga::Table#define_columnで指定されたGroonga::Typeや
1013
- * Groonga::Tableを返す。
1014
- * 範囲が指定されていないオブジェクトの場合は+nil+を返す。
1015
- */
1016
- static VALUE
1017
- rb_grn_object_get_range (VALUE self)
1018
- {
1019
- RbGrnObject *rb_grn_object;
1020
- grn_ctx *context;
1021
- grn_obj *object;
1022
- grn_id range;
1023
-
1024
- rb_grn_object = SELF(self);
1025
- object = rb_grn_object->object;
1026
- if (!object)
1027
- return Qnil;
1028
-
1029
- context = rb_grn_object->context;
1030
- range = grn_obj_get_range(context, object);
1031
- if (range == GRN_ID_NIL) {
1032
- return Qnil;
1033
- } else {
1034
- grn_obj *range_object;
1035
-
1036
- range_object = grn_ctx_at(context, range);
1037
- if (range_object)
1038
- return GRNOBJECT2RVAL(Qnil, context, range_object, RB_GRN_FALSE);
1039
- else
1040
- return UINT2NUM(range);
1041
- }
1042
- }
1043
-
1044
- /*
1045
- * Document-method: ==
1046
- *
1047
- * call-seq:
1048
- * object == other -> true/false
1049
- *
1050
- * _object_と_other_が同じgroongaのオブジェクトなら+true+を返
1051
- * し、そうでなければ+false+を返す。
1052
- */
1053
- static VALUE
1054
- rb_grn_object_equal (VALUE self, VALUE other)
1055
- {
1056
- RbGrnObject *self_rb_grn_object, *other_rb_grn_object;
1057
-
1058
- if (self == other)
1059
- return Qtrue;
1060
-
1061
- if (!RVAL2CBOOL(rb_funcall(rb_obj_class(self), rb_intern("=="), 1,
1062
- rb_obj_class(other))))
1063
- return Qfalse;
1064
-
1065
- self_rb_grn_object = SELF(self);
1066
- other_rb_grn_object = SELF(other);
1067
-
1068
- return self_rb_grn_object->object == other_rb_grn_object->object;
1069
- }
1070
-
1071
- /*
1072
- * Document-method: []
1073
- *
1074
- * call-seq:
1075
- * object[id] -> 値
1076
- *
1077
- * _object_の_id_に対応する値を返す。
1078
- */
1079
- VALUE
1080
- rb_grn_object_array_reference (VALUE self, VALUE rb_id)
1081
- {
1082
- VALUE exception;
1083
- RbGrnObject *rb_grn_object;
1084
- grn_id id, range_id;
1085
- grn_ctx *context;
1086
- grn_obj *object;
1087
- grn_obj *range;
1088
- unsigned char range_type;
1089
- grn_obj value;
1090
- VALUE rb_value = Qnil;
1091
-
1092
- rb_grn_object = SELF(self);
1093
- context = rb_grn_object->context;
1094
- object = rb_grn_object->object;
1095
- if (!object)
1096
- return Qnil;
1097
-
1098
- id = NUM2UINT(rb_id);
1099
- range_id = grn_obj_get_range(context, object);
1100
- range = grn_ctx_at(context, range_id);
1101
- range_type = range ? range->header.type : GRN_VOID;
1102
- switch (object->header.type) {
1103
- case GRN_TABLE_HASH_KEY:
1104
- case GRN_TABLE_PAT_KEY:
1105
- case GRN_TABLE_NO_KEY:
1106
- GRN_OBJ_INIT(&value, GRN_BULK, 0, GRN_ID_NIL);
1107
- break;
1108
- case GRN_TYPE:
1109
- case GRN_ACCESSOR: /* FIXME */
1110
- GRN_OBJ_INIT(&value, GRN_BULK, 0, range_id);
1111
- break;
1112
- case GRN_COLUMN_VAR_SIZE:
1113
- case GRN_COLUMN_FIX_SIZE:
1114
- switch (object->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) {
1115
- case GRN_OBJ_COLUMN_VECTOR:
1116
- GRN_OBJ_INIT(&value, GRN_VECTOR, 0, range_id);
1117
- break;
1118
- case GRN_OBJ_COLUMN_SCALAR:
1119
- GRN_OBJ_INIT(&value, GRN_BULK, 0, range_id);
1120
- break;
1121
- default:
1122
- rb_raise(rb_eGrnError, "unsupported column type: %u: %s",
1123
- range_type, rb_grn_inspect(self));
1124
- break;
1125
- }
1126
- break;
1127
- case GRN_COLUMN_INDEX:
1128
- GRN_UINT32_INIT(&value, 0);
1129
- break;
1130
- default:
1131
- rb_raise(rb_eGrnError,
1132
- "unsupported type: %s", rb_grn_inspect(self));
1133
- break;
1134
- }
1135
-
1136
- grn_obj_get_value(context, object, id, &value);
1137
- exception = rb_grn_context_to_exception(context, self);
1138
- if (NIL_P(exception))
1139
- rb_value = GRNVALUE2RVAL(context, &value, range, self);
1140
- grn_obj_close(context, &value);
1141
- if (!NIL_P(exception))
1142
- rb_exc_raise(exception);
1143
-
1144
- return rb_value;
1145
- }
1146
-
1147
- static rb_grn_boolean
1148
- rb_uvector_value_p (RbGrnObject *rb_grn_object, VALUE rb_value)
1149
- {
1150
- VALUE first_element;
1151
-
1152
- switch (rb_grn_object->range->header.type) {
1153
- case GRN_TYPE:
1154
- /* TODO: support not sizeof(grn_id) uvector. */
1155
- /*
1156
- if (!(rb_grn_object->range->header.flags | GRN_OBJ_KEY_VAR_SIZE)) {
1157
- return RB_GRN_TRUE;
1158
- }
1159
- */
1160
- break;
1161
- case GRN_TABLE_HASH_KEY:
1162
- case GRN_TABLE_PAT_KEY:
1163
- case GRN_TABLE_NO_KEY:
1164
- case GRN_TABLE_VIEW:
1165
- first_element = rb_ary_entry(rb_value, 0);
1166
- if (RVAL2CBOOL(rb_obj_is_kind_of(first_element, rb_cGrnRecord))) {
1167
- return RB_GRN_TRUE;
1168
- }
1169
- break;
1170
- default:
1171
- break;
1172
- }
1173
-
1174
- return RB_GRN_FALSE;
1175
- }
1176
-
1177
- VALUE
1178
- rb_grn_object_set_raw (RbGrnObject *rb_grn_object, grn_id id,
1179
- VALUE rb_value, int flags, VALUE related_object)
1180
- {
1181
- grn_ctx *context;
1182
- grn_obj value;
1183
- grn_rc rc;
1184
- VALUE exception;
1185
-
1186
- context = rb_grn_object->context;
1187
- if (RVAL2CBOOL(rb_obj_is_kind_of(rb_value, rb_cArray))) {
1188
- if (rb_uvector_value_p(rb_grn_object, rb_value)) {
1189
- GRN_OBJ_INIT(&value, GRN_UVECTOR, 0,
1190
- rb_grn_object->object->header.domain);
1191
- RVAL2GRNUVECTOR(rb_value, context, &value, related_object);
1192
- } else {
1193
- GRN_OBJ_INIT(&value, GRN_VECTOR, 0, GRN_ID_NIL);
1194
- RVAL2GRNVECTOR(rb_value, context, &value);
1195
- }
1196
- } else {
1197
- if (NIL_P(rb_value)) {
1198
- GRN_OBJ_INIT(&value, GRN_BULK, 0, GRN_ID_NIL);
1199
- } else {
1200
- GRN_OBJ_INIT(&value, GRN_BULK, 0, GRN_ID_NIL);
1201
- RVAL2GRNBULK(rb_value, context, &value);
1202
- }
1203
- }
1204
- rc = grn_obj_set_value(context, rb_grn_object->object, id,
1205
- &value, flags);
1206
- exception = rb_grn_context_to_exception(context, related_object);
1207
- grn_obj_close(context, &value);
1208
- if (!NIL_P(exception))
1209
- rb_exc_raise(exception);
1210
- rb_grn_rc_check(rc, related_object);
1211
-
1212
- return Qnil;
1213
- }
1214
-
1215
- static VALUE
1216
- rb_grn_object_set (VALUE self, VALUE rb_id, VALUE rb_value, int flags)
1217
- {
1218
- RbGrnObject *rb_grn_object;
1219
- grn_ctx *context;
1220
- grn_id id;
1221
-
1222
- rb_grn_object = SELF(self);
1223
- if (!rb_grn_object->object)
1224
- return Qnil;
1225
-
1226
- context = rb_grn_object->context;
1227
- id = NUM2UINT(rb_id);
1228
-
1229
- return rb_grn_object_set_raw(rb_grn_object, id, rb_value, flags, self);
1230
- }
1231
-
1232
- /*
1233
- * Document-method: []=
1234
- *
1235
- * call-seq:
1236
- * object[id] = value
1237
- *
1238
- * _object_の_id_に対応する値を設定する。既存の値は上書きさ
1239
- * れる。
1240
- */
1241
- static VALUE
1242
- rb_grn_object_array_set (VALUE self, VALUE rb_id, VALUE rb_value)
1243
- {
1244
- return rb_grn_object_set(self, rb_id, rb_value, GRN_OBJ_SET);
1245
- }
1246
-
1247
- /*
1248
- * Document-method: append
1249
- *
1250
- * call-seq:
1251
- * object.append(id, value)
1252
- *
1253
- * _object_の_id_に対応する値の最後に_value_を追加する。
1254
- */
1255
- static VALUE
1256
- rb_grn_object_append_value (VALUE self, VALUE rb_id, VALUE rb_value)
1257
- {
1258
- return rb_grn_object_set(self, rb_id, rb_value, GRN_OBJ_APPEND);
1259
- }
1260
-
1261
- /*
1262
- * Document-method: prepend
1263
- *
1264
- * call-seq:
1265
- * object.prepend(id, value)
1266
- *
1267
- * _object_の_id_に対応する値の最初に_value_を追加する。
1268
- */
1269
- static VALUE
1270
- rb_grn_object_prepend_value (VALUE self, VALUE rb_id, VALUE rb_value)
1271
- {
1272
- return rb_grn_object_set(self, rb_id, rb_value, GRN_OBJ_PREPEND);
1273
- }
1274
-
1275
- /*
1276
- * Document-method: remove
1277
- *
1278
- * call-seq:
1279
- * object.remove
1280
- *
1281
- * _object_をメモリから解放し、それが永続オブジェクトであっ
1282
- * た場合は、該当するファイル一式を削除する。
1283
- */
1284
- static VALUE
1285
- rb_grn_object_remove (VALUE self)
1286
- {
1287
- RbGrnObject *rb_grn_object;
1288
- grn_ctx *context;
1289
- grn_rc rc;
1290
-
1291
- rb_grn_object = SELF(self);
1292
- if (!rb_grn_object->object)
1293
- return Qnil;
1294
-
1295
- context = rb_grn_object->context;
1296
- rc = grn_obj_remove(context, rb_grn_object->object);
1297
- rb_grn_rc_check(rc, self);
1298
-
1299
- rb_iv_set(self, "@context", Qnil);
1300
-
1301
- return Qnil;
1302
- }
1303
-
1304
- void
1305
- rb_grn_init_object (VALUE mGrn)
1306
- {
1307
- rb_cGrnObject = rb_define_class_under(mGrn, "Object", rb_cObject);
1308
- rb_define_alloc_func(rb_cGrnObject, rb_grn_object_alloc);
1309
-
1310
- rb_define_attr(rb_cGrnObject, "context", RB_GRN_TRUE, RB_GRN_FALSE);
1311
-
1312
- rb_define_method(rb_cGrnObject, "inspect", rb_grn_object_inspect, 0);
1313
-
1314
- rb_define_method(rb_cGrnObject, "id", rb_grn_object_get_id, 0);
1315
- rb_define_method(rb_cGrnObject, "domain", rb_grn_object_get_domain, 0);
1316
- rb_define_method(rb_cGrnObject, "name", rb_grn_object_get_name, 0);
1317
- rb_define_method(rb_cGrnObject, "range", rb_grn_object_get_range, 0);
1318
- rb_define_method(rb_cGrnObject, "path", rb_grn_object_get_path, 0);
1319
-
1320
- rb_define_method(rb_cGrnObject, "temporary?", rb_grn_object_temporary_p, 0);
1321
- rb_define_method(rb_cGrnObject, "persistent?",
1322
- rb_grn_object_persistent_p, 0);
1323
-
1324
- rb_define_method(rb_cGrnObject, "==", rb_grn_object_equal, 1);
1325
-
1326
- rb_define_method(rb_cGrnObject, "close", rb_grn_object_close, 0);
1327
- rb_define_method(rb_cGrnObject, "closed?", rb_grn_object_closed_p, 0);
1328
-
1329
- rb_define_method(rb_cGrnObject, "[]", rb_grn_object_array_reference, 1);
1330
- rb_define_method(rb_cGrnObject, "[]=", rb_grn_object_array_set, 2);
1331
- rb_define_method(rb_cGrnObject, "append", rb_grn_object_append_value, 2);
1332
- rb_define_method(rb_cGrnObject, "prepend", rb_grn_object_prepend_value, 2);
1333
-
1334
- rb_define_method(rb_cGrnObject, "remove", rb_grn_object_remove, 0);
1335
- }