groonga 0.9.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
- }