groonga 0.0.2 → 0.0.3

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 (54) hide show
  1. data/NEWS.ja.rdoc +18 -3
  2. data/NEWS.rdoc +18 -3
  3. data/README.ja.rdoc +2 -0
  4. data/README.rdoc +2 -0
  5. data/Rakefile +14 -5
  6. data/TUTORIAL.ja.rdoc +82 -16
  7. data/benchmark/{read-write-small-many-items.rb → read-write-many-small-items.rb} +26 -23
  8. data/benchmark/{write-small-many-items.rb → write-many-small-items.rb} +26 -23
  9. data/example/bookmark.rb +49 -5
  10. data/ext/rb-grn-array.c +11 -1
  11. data/ext/rb-grn-column.c +132 -5
  12. data/ext/rb-grn-context.c +85 -80
  13. data/ext/rb-grn-database.c +182 -9
  14. data/ext/rb-grn-expression-builder.c +69 -0
  15. data/ext/rb-grn-expression.c +314 -0
  16. data/ext/rb-grn-fix-size-column.c +68 -89
  17. data/ext/rb-grn-hash.c +14 -5
  18. data/ext/rb-grn-index-column.c +14 -55
  19. data/ext/rb-grn-object.c +206 -75
  20. data/ext/rb-grn-operation.c +92 -0
  21. data/ext/rb-grn-patricia-trie.c +10 -32
  22. data/ext/rb-grn-query.c +9 -9
  23. data/ext/rb-grn-table-cursor.c +19 -80
  24. data/ext/rb-grn-table-key-support.c +33 -39
  25. data/ext/rb-grn-table.c +436 -79
  26. data/ext/rb-grn-type.c +10 -3
  27. data/ext/rb-grn-utils.c +131 -4
  28. data/ext/rb-grn-variable-size-column.c +36 -0
  29. data/ext/rb-grn-variable.c +90 -0
  30. data/ext/rb-grn.h +109 -56
  31. data/ext/rb-groonga.c +4 -0
  32. data/extconf.rb +39 -13
  33. data/html/index.html +2 -2
  34. data/lib/groonga.rb +22 -0
  35. data/lib/groonga/expression-builder.rb +141 -0
  36. data/lib/groonga/record.rb +25 -1
  37. data/lib/groonga/schema.rb +418 -0
  38. data/test/test-column.rb +11 -23
  39. data/test/test-context.rb +1 -1
  40. data/test/test-database.rb +60 -19
  41. data/test/test-expression-builder.rb +114 -0
  42. data/test/test-expression.rb +55 -0
  43. data/test/test-fix-size-column.rb +53 -0
  44. data/test/test-hash.rb +10 -3
  45. data/test/test-index-column.rb +24 -0
  46. data/test/test-patricia-trie.rb +9 -0
  47. data/test/test-procedure.rb +5 -5
  48. data/test/test-record.rb +71 -4
  49. data/test/test-schema.rb +207 -0
  50. data/test/test-table.rb +94 -12
  51. data/test/test-type.rb +18 -11
  52. data/test/test-variable-size-column.rb +53 -0
  53. data/test/test-variable.rb +28 -0
  54. metadata +18 -5
@@ -0,0 +1,69 @@
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
+ VALUE rb_cGrnRecordExpressionBuilder;
22
+ VALUE rb_cGrnColumnExpressionBuilder;
23
+
24
+ VALUE
25
+ rb_grn_record_expression_builder_new (VALUE table, VALUE name)
26
+ {
27
+ return rb_funcall(rb_cGrnRecordExpressionBuilder,
28
+ rb_intern("new"), 2, table, name);
29
+ }
30
+
31
+ VALUE
32
+ rb_grn_column_expression_builder_new (VALUE column, VALUE name, VALUE query)
33
+ {
34
+ return rb_funcall(rb_cGrnColumnExpressionBuilder,
35
+ rb_intern("new"), 3, column, name, query);
36
+ }
37
+
38
+ static VALUE
39
+ build (VALUE self)
40
+ {
41
+ return rb_funcall(self, rb_intern("build"), 0);
42
+ }
43
+
44
+ static VALUE
45
+ build_block (VALUE self)
46
+ {
47
+ return rb_funcall(rb_block_proc(), rb_intern("call"), 1, self);
48
+ }
49
+
50
+ VALUE
51
+ rb_grn_record_expression_builder_build (VALUE self)
52
+ {
53
+ return rb_iterate(build, self, build_block, self);
54
+ }
55
+
56
+ VALUE
57
+ rb_grn_column_expression_builder_build (VALUE self)
58
+ {
59
+ return rb_iterate(build, self, build_block, self);
60
+ }
61
+
62
+ void
63
+ rb_grn_init_expression_builder (VALUE mGrn)
64
+ {
65
+ rb_cGrnRecordExpressionBuilder =
66
+ rb_const_get(mGrn, rb_intern("RecordExpressionBuilder"));
67
+ rb_cGrnColumnExpressionBuilder =
68
+ rb_const_get(mGrn, rb_intern("ColumnExpressionBuilder"));
69
+ }
@@ -0,0 +1,314 @@
1
+ /* -*- c-file-style: "ruby" -*- */
2
+ /*
3
+ Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License version 2.1 as published by the Free Software Foundation.
8
+
9
+ This library is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ Lesser General Public License for more details.
13
+
14
+ You should have received a copy of the GNU Lesser General Public
15
+ License along with this library; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+ */
18
+
19
+ #include "rb-grn.h"
20
+
21
+ #define SELF(object) ((RbGrnExpression *)DATA_PTR(object))
22
+
23
+ VALUE rb_cGrnExpression;
24
+
25
+ void
26
+ rb_grn_expression_finalizer (grn_ctx *context, grn_obj *object,
27
+ RbGrnExpression *rb_grn_expression)
28
+ {
29
+ if (!context)
30
+ return;
31
+
32
+ grn_obj_close(context, rb_grn_expression->value);
33
+ }
34
+
35
+ void
36
+ rb_grn_expression_bind (RbGrnExpression *rb_grn_expression,
37
+ grn_ctx *context, grn_obj *expression)
38
+ {
39
+ RbGrnObject *rb_grn_object;
40
+
41
+ rb_grn_object = RB_GRN_OBJECT(rb_grn_expression);
42
+
43
+ rb_grn_expression->value = grn_obj_open(context, GRN_BULK, 0,
44
+ rb_grn_object->range_id);
45
+ }
46
+
47
+ void
48
+ rb_grn_expression_deconstruct (RbGrnExpression *rb_grn_expression,
49
+ grn_obj **expression,
50
+ grn_ctx **context,
51
+ grn_id *domain_id,
52
+ grn_obj **domain,
53
+ grn_obj **value,
54
+ grn_id *range_id,
55
+ grn_obj **range)
56
+ {
57
+ RbGrnObject *rb_grn_object;
58
+
59
+ rb_grn_object = RB_GRN_OBJECT(rb_grn_expression);
60
+ rb_grn_object_deconstruct(rb_grn_object, expression, context,
61
+ domain_id, domain,
62
+ range_id, range);
63
+
64
+ if (value)
65
+ *value = rb_grn_expression->value;
66
+ }
67
+
68
+ static VALUE
69
+ rb_grn_expression_initialize (int argc, VALUE *argv, VALUE self)
70
+ {
71
+ grn_ctx *context = NULL;
72
+ grn_obj *expression;
73
+ VALUE options, rb_context, rb_name, rb_query, rb_table, rb_default_column;
74
+ char *name = NULL, *query = NULL;
75
+ unsigned name_size = 0, query_size = 0;
76
+
77
+ rb_scan_args(argc, argv, "01", &options);
78
+ rb_grn_scan_options(options,
79
+ "context", &rb_context,
80
+ "name", &rb_name,
81
+ "query", &rb_query,
82
+ "table", &rb_table,
83
+ "default_column", &rb_default_column,
84
+ NULL);
85
+
86
+ context = rb_grn_context_ensure(&rb_context);
87
+
88
+ if (!NIL_P(rb_name)) {
89
+ name = StringValuePtr(rb_name);
90
+ name_size = RSTRING_LEN(rb_name);
91
+ }
92
+
93
+ if (!NIL_P(rb_query)) {
94
+ query = StringValuePtr(rb_query);
95
+ query_size = RSTRING_LEN(rb_query);
96
+ }
97
+
98
+ if (query) {
99
+ grn_obj *table;
100
+ grn_obj *default_column = NULL;
101
+
102
+ table = RVAL2GRNOBJECT(rb_table, &context);
103
+ default_column = RVAL2GRNBULK(rb_default_column, context, default_column);
104
+ expression = grn_expr_create_from_str(context, name, name_size,
105
+ query, query_size,
106
+ table, default_column);
107
+ } else {
108
+ expression = grn_expr_create(context, name, name_size);
109
+ }
110
+ rb_grn_object_assign(Qnil, self, rb_context, context, expression);
111
+ rb_grn_context_check(context, self);
112
+
113
+ return Qnil;
114
+ }
115
+
116
+ static VALUE
117
+ rb_grn_expression_define_variable (int argc, VALUE *argv, VALUE self)
118
+ {
119
+ grn_ctx *context = NULL;
120
+ grn_obj *expression, *variable;
121
+ char *name = NULL;
122
+ unsigned name_size = 0;
123
+ VALUE options, rb_name, rb_domain, rb_variable;
124
+
125
+ rb_scan_args(argc, argv, "01", &options);
126
+
127
+ rb_grn_expression_deconstruct(SELF(self), &expression, &context,
128
+ NULL, NULL,
129
+ NULL, NULL, NULL);
130
+
131
+ rb_grn_scan_options(options,
132
+ "name", &rb_name,
133
+ "domain", &rb_domain,
134
+ NULL);
135
+
136
+ if (!NIL_P(rb_name)) {
137
+ name = StringValuePtr(rb_name);
138
+ name_size = RSTRING_LEN(rb_name);
139
+ }
140
+
141
+ variable = grn_expr_add_var(context, expression, name, name_size);
142
+ rb_variable = GRNVARIABLE2RVAL(context, variable);
143
+
144
+ if (RVAL2CBOOL(rb_obj_is_kind_of(rb_domain, rb_cGrnTable))) {
145
+ grn_id domain_id;
146
+ domain_id = NUM2UINT(rb_funcall(rb_domain, rb_intern("id"), 0));
147
+ GRN_RECORD_INIT(variable, 0, domain_id);
148
+ }
149
+
150
+ return rb_variable;
151
+ }
152
+
153
+ static VALUE
154
+ rb_grn_expression_get_value (VALUE self, VALUE rb_offset)
155
+ {
156
+ grn_ctx *context = NULL;
157
+ grn_obj *value, *expression;
158
+ int offset;
159
+
160
+ rb_grn_expression_deconstruct(SELF(self), &expression, &context,
161
+ NULL, NULL,
162
+ NULL, NULL, NULL);
163
+
164
+ offset = NUM2INT(rb_offset);
165
+ value = grn_expr_get_value(context, expression, offset);
166
+ return GRNBULK2RVAL(context, value, self);
167
+ }
168
+
169
+ static VALUE
170
+ rb_grn_expression_append_object (VALUE self, VALUE rb_object)
171
+ {
172
+ grn_ctx *context = NULL;
173
+ grn_obj *expression, *object;
174
+
175
+ rb_grn_expression_deconstruct(SELF(self), &expression, &context,
176
+ NULL, NULL,
177
+ NULL, NULL, NULL);
178
+
179
+ object = RVAL2GRNOBJECT(rb_object, &context);
180
+ grn_expr_append_obj(context, expression, object);
181
+ rb_grn_context_check(context, self);
182
+ return self;
183
+ }
184
+
185
+ static VALUE
186
+ rb_grn_expression_append_constant (VALUE self, VALUE rb_constant)
187
+ {
188
+ grn_ctx *context = NULL;
189
+ grn_obj *expression, *constant = NULL;
190
+
191
+ rb_grn_expression_deconstruct(SELF(self), &expression, &context,
192
+ NULL, NULL, NULL,
193
+ NULL, NULL);
194
+
195
+ RVAL2GRNOBJ(rb_constant, context, &constant);
196
+ grn_expr_append_const(context, expression, constant);
197
+ grn_obj_close(context, constant);
198
+ rb_grn_context_check(context, self);
199
+ return self;
200
+ }
201
+
202
+ static VALUE
203
+ rb_grn_expression_append_operation (VALUE self, VALUE rb_operation,
204
+ VALUE rb_n_arguments)
205
+ {
206
+ grn_ctx *context = NULL;
207
+ grn_obj *expression;
208
+ grn_operator operation;
209
+ int n_arguments = 0;
210
+
211
+ rb_grn_expression_deconstruct(SELF(self), &expression, &context,
212
+ NULL, NULL,
213
+ NULL, NULL, NULL);
214
+
215
+ operation = NUM2INT(rb_operation);
216
+ n_arguments = NUM2INT(rb_n_arguments);
217
+ grn_expr_append_op(context, expression, operation, n_arguments);
218
+ rb_grn_context_check(context, self);
219
+ return Qnil;
220
+ }
221
+
222
+ static VALUE
223
+ rb_grn_expression_execute (VALUE self)
224
+ {
225
+ grn_ctx *context = NULL;
226
+ grn_obj *expression, *result;
227
+
228
+ rb_grn_expression_deconstruct(SELF(self), &expression, &context,
229
+ NULL, NULL,
230
+ NULL, NULL, NULL);
231
+
232
+ result = grn_expr_exec(context, expression);
233
+ return GRNOBJ2RVAL(Qnil, context, result, self);
234
+ }
235
+
236
+ static VALUE
237
+ rb_grn_expression_compile (VALUE self)
238
+ {
239
+ grn_ctx *context = NULL;
240
+ grn_obj *expression;
241
+ grn_rc rc;
242
+
243
+ rb_grn_expression_deconstruct(SELF(self), &expression, &context,
244
+ NULL, NULL,
245
+ NULL, NULL, NULL);
246
+
247
+ rc = grn_expr_compile(context, expression);
248
+ rb_grn_context_check(context, self);
249
+ rb_grn_rc_check(rc, self);
250
+
251
+ return Qnil;
252
+ }
253
+
254
+ static VALUE
255
+ rb_grn_expression_array_reference (VALUE self, VALUE rb_name_or_offset)
256
+ {
257
+ grn_ctx *context = NULL;
258
+ grn_obj *expression, *variable, *value;
259
+ char *name = NULL;
260
+ unsigned name_size = 0;
261
+ int offset;
262
+
263
+ rb_grn_expression_deconstruct(SELF(self), &expression, &context,
264
+ NULL, NULL,
265
+ NULL, NULL, NULL);
266
+
267
+ switch (TYPE(rb_name_or_offset)) {
268
+ case T_STRING:
269
+ name = RSTRING_PTR(rb_name_or_offset);
270
+ name_size = RSTRING_LEN(rb_name_or_offset);
271
+ variable = grn_expr_get_var(context, expression, name, name_size);
272
+ return GRNBULK2RVAL(context, variable, self);
273
+ break;
274
+ case T_FIXNUM:
275
+ offset = NUM2INT(rb_name_or_offset);
276
+ value = grn_expr_get_var_by_offset(context, expression, offset);
277
+ return GRNBULK2RVAL(context, value, self);
278
+ break;
279
+ default:
280
+ rb_raise(rb_eArgError, "xxx");
281
+ break;
282
+ }
283
+
284
+ return Qnil;
285
+ }
286
+
287
+ void
288
+ rb_grn_init_expression (VALUE mGrn)
289
+ {
290
+ rb_cGrnExpression = rb_define_class_under(mGrn, "Expression", rb_cGrnObject);
291
+
292
+ rb_define_method(rb_cGrnExpression, "initialize",
293
+ rb_grn_expression_initialize, -1);
294
+
295
+ rb_define_method(rb_cGrnExpression, "define_variable",
296
+ rb_grn_expression_define_variable, -1);
297
+ rb_define_method(rb_cGrnExpression, "append_object",
298
+ rb_grn_expression_append_object, 1);
299
+ rb_define_method(rb_cGrnExpression, "append_constant",
300
+ rb_grn_expression_append_constant, 1);
301
+ rb_define_method(rb_cGrnExpression, "append_operation",
302
+ rb_grn_expression_append_operation, 2);
303
+
304
+ rb_define_method(rb_cGrnExpression, "execute",
305
+ rb_grn_expression_execute, 0);
306
+ rb_define_method(rb_cGrnExpression, "compile",
307
+ rb_grn_expression_compile, 0);
308
+
309
+ rb_define_method(rb_cGrnExpression, "value",
310
+ rb_grn_expression_get_value, 1);
311
+
312
+ rb_define_method(rb_cGrnExpression, "[]",
313
+ rb_grn_expression_array_reference, 1);
314
+ }
@@ -18,7 +18,7 @@
18
18
 
19
19
  #include "rb-grn.h"
20
20
 
21
- #define SELF(object) ((RbGrnFixSizeColumn *)DATA_PTR(object))
21
+ #define SELF(object) ((RbGrnColumn *)DATA_PTR(object))
22
22
 
23
23
  VALUE rb_cGrnFixSizeColumn;
24
24
 
@@ -28,87 +28,6 @@ VALUE rb_cGrnFixSizeColumn;
28
28
  * 固定長データ用のカラム。
29
29
  */
30
30
 
31
- void
32
- rb_grn_fix_size_column_unbind (RbGrnFixSizeColumn *rb_grn_fix_size_column)
33
- {
34
- RbGrnObject *rb_grn_object;
35
- grn_ctx *context;
36
-
37
- rb_grn_object = RB_GRN_OBJECT(rb_grn_fix_size_column);
38
- context = rb_grn_object->context;
39
-
40
- if (context)
41
- grn_obj_close(context, rb_grn_fix_size_column->value);
42
-
43
- rb_grn_object_unbind(rb_grn_object);
44
- }
45
-
46
- static void
47
- rb_grn_fix_size_column_free (void *object)
48
- {
49
- RbGrnFixSizeColumn *rb_grn_fix_size_column = object;
50
-
51
- rb_grn_fix_size_column_unbind(rb_grn_fix_size_column);
52
- xfree(rb_grn_fix_size_column);
53
- }
54
-
55
- VALUE
56
- rb_grn_fix_size_column_alloc (VALUE klass)
57
- {
58
- return Data_Wrap_Struct(klass, NULL, rb_grn_fix_size_column_free, NULL);
59
- }
60
-
61
- void
62
- rb_grn_fix_size_column_bind (RbGrnFixSizeColumn *rb_grn_fix_size_column,
63
- grn_ctx *context, grn_obj *column,
64
- rb_grn_boolean owner)
65
- {
66
- RbGrnObject *rb_grn_object;
67
-
68
- rb_grn_object = RB_GRN_OBJECT(rb_grn_fix_size_column);
69
- rb_grn_object_bind(rb_grn_object, context, column, owner);
70
- rb_grn_object->unbind =
71
- RB_GRN_UNBIND_FUNCTION(rb_grn_fix_size_column_unbind);
72
-
73
- rb_grn_fix_size_column->value = grn_obj_open(context, GRN_BULK, 0,
74
- rb_grn_object->range_id);
75
- }
76
-
77
- void
78
- rb_grn_fix_size_column_assign (VALUE self, VALUE rb_context,
79
- grn_ctx *context, grn_obj *column,
80
- rb_grn_boolean owner)
81
- {
82
- RbGrnFixSizeColumn *rb_grn_fix_size_column;
83
-
84
- rb_grn_fix_size_column = ALLOC(RbGrnFixSizeColumn);
85
- DATA_PTR(self) = rb_grn_fix_size_column;
86
- rb_grn_fix_size_column_bind(rb_grn_fix_size_column, context, column, owner);
87
-
88
- rb_iv_set(self, "context", rb_context);
89
- }
90
-
91
- void
92
- rb_grn_fix_size_column_deconstruct (RbGrnFixSizeColumn *rb_grn_fix_size_column,
93
- grn_obj **column,
94
- grn_ctx **context,
95
- grn_id *domain_id,
96
- grn_obj **domain,
97
- grn_obj **value,
98
- grn_id *range_id,
99
- grn_obj **range)
100
- {
101
- RbGrnObject *rb_grn_object;
102
-
103
- rb_grn_object = RB_GRN_OBJECT(rb_grn_fix_size_column);
104
- rb_grn_object_deconstruct(rb_grn_object, column, context,
105
- domain_id, domain,
106
- range_id, range);
107
-
108
- if (value)
109
- *value = rb_grn_fix_size_column->value;
110
- }
111
-
112
31
  /*
113
32
  * call-seq:
114
33
  * column[id] -> 値
@@ -124,9 +43,9 @@ rb_grn_fix_size_column_array_reference (VALUE self, VALUE rb_id)
124
43
  grn_obj *range;
125
44
  grn_obj *value;
126
45
 
127
- rb_grn_fix_size_column_deconstruct(SELF(self), &fix_size_column, &context,
128
- NULL, NULL,
129
- &value, NULL, &range);
46
+ rb_grn_column_deconstruct(SELF(self), &fix_size_column, &context,
47
+ NULL, NULL,
48
+ &value, NULL, &range);
130
49
 
131
50
  id = NUM2UINT(rb_id);
132
51
  GRN_BULK_REWIND(value);
@@ -153,9 +72,9 @@ rb_grn_fix_size_column_array_set (VALUE self, VALUE rb_id, VALUE rb_value)
153
72
  grn_rc rc;
154
73
  grn_id id;
155
74
 
156
- rb_grn_fix_size_column_deconstruct(SELF(self), &column, &context,
157
- &domain_id, &domain,
158
- &value, &range_id, &range);
75
+ rb_grn_column_deconstruct(SELF(self), &column, &context,
76
+ &domain_id, &domain,
77
+ &value, &range_id, &range);
159
78
 
160
79
  id = NUM2UINT(rb_id);
161
80
 
@@ -206,15 +125,75 @@ rb_grn_fix_size_column_array_set (VALUE self, VALUE rb_id, VALUE rb_value)
206
125
  return Qnil;
207
126
  }
208
127
 
128
+ static VALUE
129
+ rb_grn_fix_size_column_integer_set (int argc, VALUE *argv, VALUE self, int flags)
130
+ {
131
+ grn_ctx *context = NULL;
132
+ grn_obj *column;
133
+ grn_obj *value;
134
+ grn_rc rc;
135
+ grn_id id;
136
+ VALUE rb_id, rb_delta;
137
+
138
+ rb_scan_args(argc, argv, "11", &rb_id, &rb_delta);
139
+
140
+ rb_grn_column_deconstruct(SELF(self), &column, &context,
141
+ NULL, NULL,
142
+ &value, NULL, NULL);
143
+
144
+ id = NUM2UINT(rb_id);
145
+ if (NIL_P(rb_delta))
146
+ rb_delta = INT2NUM(1);
147
+
148
+ GRN_BULK_REWIND(value);
149
+ RVAL2GRNBULK(rb_delta, context, value);
150
+
151
+ rc = grn_obj_set_value(context, column, id, value, flags);
152
+ rb_grn_context_check(context, self);
153
+ rb_grn_rc_check(rc, self);
154
+
155
+ return Qnil;
156
+ }
157
+
158
+ /*
159
+ * call-seq:
160
+ * column.increment!(id, delta=nil)
161
+ *
162
+ * _column_の_id_に対応する値を_delta_だけ増加する。_delta_
163
+ * が+nil+の場合は1増加する。
164
+ */
165
+ static VALUE
166
+ rb_grn_fix_size_column_increment (int argc, VALUE *argv, VALUE self)
167
+ {
168
+ return rb_grn_fix_size_column_integer_set(argc, argv, self, GRN_OBJ_INCR);
169
+ }
170
+
171
+ /*
172
+ * call-seq:
173
+ * column.decrement!(id, delta=nil)
174
+ *
175
+ * _column_の_id_に対応する値を_delta_だけ減少する。_delta_
176
+ * が+nil+の場合は1減少する。
177
+ */
178
+ static VALUE
179
+ rb_grn_fix_size_column_decrement (int argc, VALUE *argv, VALUE self)
180
+ {
181
+ return rb_grn_fix_size_column_integer_set(argc, argv, self, GRN_OBJ_DECR);
182
+ }
183
+
209
184
  void
210
185
  rb_grn_init_fix_size_column (VALUE mGrn)
211
186
  {
212
187
  rb_cGrnFixSizeColumn =
213
188
  rb_define_class_under(mGrn, "FixSizeColumn", rb_cGrnColumn);
214
- rb_define_alloc_func(rb_cGrnFixSizeColumn, rb_grn_fix_size_column_alloc);
215
189
 
216
190
  rb_define_method(rb_cGrnFixSizeColumn, "[]",
217
191
  rb_grn_fix_size_column_array_reference, 1);
218
192
  rb_define_method(rb_cGrnFixSizeColumn, "[]=",
219
193
  rb_grn_fix_size_column_array_set, 2);
194
+
195
+ rb_define_method(rb_cGrnFixSizeColumn, "increment!",
196
+ rb_grn_fix_size_column_increment, -1);
197
+ rb_define_method(rb_cGrnFixSizeColumn, "decrement!",
198
+ rb_grn_fix_size_column_decrement, -1);
220
199
  }