groonga 0.0.2 → 0.0.3

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