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
data/ext/rb-grn-type.c CHANGED
@@ -85,7 +85,7 @@ rb_grn_type_initialize (int argc, VALUE *argv, VALUE self)
85
85
  }
86
86
 
87
87
  type = grn_type_create(context, name, name_size, flags, size);
88
- rb_grn_object_assign(self, rb_context, context, type, RB_GRN_TRUE);
88
+ rb_grn_object_assign(Qnil, self, rb_context, context, type);
89
89
  rb_grn_context_check(context, rb_ary_new4(argc, argv));
90
90
 
91
91
  return Qnil;
@@ -98,15 +98,22 @@ rb_grn_init_type (VALUE mGrn)
98
98
 
99
99
  rb_define_method(rb_cGrnType, "initialize", rb_grn_type_initialize, -1);
100
100
 
101
+ rb_define_const(rb_cGrnType, "OBJECT", INT2NUM(GRN_DB_OBJECT));
102
+ rb_define_const(rb_cGrnType, "BOOLEAN", INT2NUM(GRN_DB_BOOL));
103
+ rb_define_const(rb_cGrnType, "BOOL", INT2NUM(GRN_DB_BOOL));
104
+ rb_define_const(rb_cGrnType, "INT8", INT2NUM(GRN_DB_INT8));
105
+ rb_define_const(rb_cGrnType, "UINT8", INT2NUM(GRN_DB_UINT8));
106
+ rb_define_const(rb_cGrnType, "INT16", INT2NUM(GRN_DB_INT16));
107
+ rb_define_const(rb_cGrnType, "UINT16", INT2NUM(GRN_DB_UINT16));
101
108
  rb_define_const(rb_cGrnType, "INT32", INT2NUM(GRN_DB_INT32));
102
109
  rb_define_const(rb_cGrnType, "UINT32", INT2NUM(GRN_DB_UINT32));
103
110
  rb_define_const(rb_cGrnType, "INT64", INT2NUM(GRN_DB_INT64));
104
111
  rb_define_const(rb_cGrnType, "UINT64", INT2NUM(GRN_DB_UINT64));
105
112
  rb_define_const(rb_cGrnType, "FLOAT", INT2NUM(GRN_DB_FLOAT));
106
113
  rb_define_const(rb_cGrnType, "TIME", INT2NUM(GRN_DB_TIME));
107
- rb_define_const(rb_cGrnType, "SHORT_TEXT", INT2NUM(GRN_DB_SHORTTEXT));
114
+ rb_define_const(rb_cGrnType, "SHORT_TEXT", INT2NUM(GRN_DB_SHORT_TEXT));
108
115
  rb_define_const(rb_cGrnType, "TEXT", INT2NUM(GRN_DB_TEXT));
109
- rb_define_const(rb_cGrnType, "LONG_TEXT", INT2NUM(GRN_DB_LONGTEXT));
116
+ rb_define_const(rb_cGrnType, "LONG_TEXT", INT2NUM(GRN_DB_LONG_TEXT));
110
117
  rb_define_const(rb_cGrnType, "DELIMIT", INT2NUM(GRN_DB_DELIMIT));
111
118
  rb_define_const(rb_cGrnType, "UNIGRAM", INT2NUM(GRN_DB_UNIGRAM));
112
119
  rb_define_const(rb_cGrnType, "BIGRAM", INT2NUM(GRN_DB_BIGRAM));
data/ext/rb-grn-utils.c CHANGED
@@ -116,9 +116,9 @@ rb_grn_bulk_to_ruby_object_by_range_id (grn_ctx *context, grn_obj *bulk,
116
116
  INT2NUM(time_value->tv_usec));
117
117
  }
118
118
  break;
119
- case GRN_DB_SHORTTEXT:
119
+ case GRN_DB_SHORT_TEXT:
120
120
  case GRN_DB_TEXT:
121
- case GRN_DB_LONGTEXT:
121
+ case GRN_DB_LONG_TEXT:
122
122
  *rb_value = rb_str_new(GRN_BULK_HEAD(bulk), GRN_BULK_VSIZE(bulk));
123
123
  break;
124
124
  default:
@@ -307,9 +307,9 @@ rb_grn_bulk_from_ruby_object_with_type (VALUE object, grn_ctx *context,
307
307
  string = (const char *)&time_value;
308
308
  size = sizeof(time_value);
309
309
  break;
310
- case GRN_DB_SHORTTEXT:
310
+ case GRN_DB_SHORT_TEXT:
311
311
  case GRN_DB_TEXT:
312
- case GRN_DB_LONGTEXT:
312
+ case GRN_DB_LONG_TEXT:
313
313
  string = StringValuePtr(object);
314
314
  size = RSTRING_LEN(object);
315
315
  range = grn_obj_get_range(context, type);
@@ -571,6 +571,133 @@ rb_grn_key_from_ruby_object (VALUE rb_key, grn_ctx *context,
571
571
  return key;
572
572
  }
573
573
 
574
+ grn_obj *
575
+ rb_grn_obj_from_ruby_object (VALUE rb_object, grn_ctx *context, grn_obj **_obj)
576
+ {
577
+ grn_obj *obj;
578
+
579
+ if (*_obj) {
580
+ obj = *_obj;
581
+ grn_obj_close(context, obj); /* FIXME: grn_obj_reinit() */
582
+ } else {
583
+ *_obj = grn_obj_open(context, GRN_VOID, 0, GRN_ID_NIL);
584
+ obj = *_obj;
585
+ }
586
+
587
+ switch (TYPE(rb_object)) {
588
+ case T_NIL:
589
+ GRN_VOID_INIT(obj);
590
+ break;
591
+ case T_STRING:
592
+ GRN_TEXT_INIT(obj, 0);
593
+ GRN_TEXT_SET(context, obj,
594
+ RSTRING_PTR(rb_object), RSTRING_LEN(rb_object));
595
+ break;
596
+ case T_FIXNUM:
597
+ GRN_INT32_INIT(obj, 0);
598
+ GRN_INT32_SET(context, obj, NUM2INT(rb_object));
599
+ break;
600
+ case T_BIGNUM:
601
+ GRN_INT64_INIT(obj, 0);
602
+ GRN_INT64_SET(context, obj, NUM2LL(rb_object));
603
+ break;
604
+ case T_FLOAT:
605
+ GRN_FLOAT_INIT(obj, 0);
606
+ GRN_FLOAT_SET(context, obj, NUM2DBL(rb_object));
607
+ break;
608
+ default:
609
+ if (RVAL2CBOOL(rb_obj_is_kind_of(rb_object, rb_cTime))) {
610
+ VALUE sec, usec;
611
+ unsigned long long time_value;
612
+
613
+ sec = rb_funcall(rb_object, rb_intern("to_i"), 0);
614
+ usec = rb_funcall(rb_object, rb_intern("usec"), 0);
615
+ time_value = NUM2INT(sec);
616
+ time_value <<= 32;
617
+ time_value += NUM2INT(usec);
618
+ GRN_TIME_INIT(obj, 0);
619
+ GRN_TIME_SET(context, obj, time_value);
620
+ } else if (RVAL2CBOOL(rb_obj_is_kind_of(rb_object, rb_cGrnObject))) {
621
+ grn_obj_close(context, obj); /* TODO: reduce memory allocation */
622
+ *_obj = RVAL2GRNOBJECT(rb_object, &context);
623
+ obj = *_obj;
624
+ } else if (RVAL2CBOOL(rb_obj_is_kind_of(rb_object, rb_cGrnRecord))) {
625
+ grn_id id, table_id;
626
+ VALUE rb_table;
627
+ grn_obj *table = NULL;
628
+
629
+ id = NUM2UINT(rb_funcall(rb_object, rb_intern("id"), 0));
630
+ rb_table = rb_funcall(rb_object, rb_intern("table"), 0);
631
+ rb_grn_table_deconstruct(RB_GRN_TABLE(DATA_PTR(rb_table)),
632
+ &table, NULL,
633
+ NULL, NULL, NULL, NULL, NULL);
634
+ table_id = grn_obj_id(context, table);
635
+ GRN_RECORD_INIT(obj, 0, table_id);
636
+ GRN_RECORD_SET(context, obj, id);
637
+ } else {
638
+ rb_raise(rb_eTypeError,
639
+ "should be one of "
640
+ "[nil, String, Integer, Float, Time, Groonga::Object, "
641
+ "Groonga::Record]: <%s>",
642
+ rb_grn_inspect(rb_object));
643
+ }
644
+ break;
645
+ }
646
+
647
+ return obj;
648
+ }
649
+
650
+ VALUE
651
+ rb_grn_obj_to_ruby_object (VALUE klass, grn_ctx *context,
652
+ grn_obj *obj, VALUE related_object)
653
+ {
654
+ if (!obj)
655
+ return Qnil;
656
+
657
+ /* if (NIL_P(klass)) */
658
+ /* klass = GRNOBJECT2RCLASS(obj); */
659
+
660
+ switch (obj->header.type) {
661
+ case GRN_VOID:
662
+ return Qnil;
663
+ break;
664
+ case GRN_BULK:
665
+ return GRNBULK2RVAL(context, obj, related_object);
666
+ break;
667
+ /* case GRN_PTR: */
668
+ /* case GRN_UVECTOR: */
669
+ /* case GRN_PVECTOR: */
670
+ /* case GRN_VECTOR: */
671
+ /* case GRN_MSG: */
672
+ /* case GRN_QUERY: */
673
+ /* case GRN_ACCESSOR: */
674
+ /* case GRN_SNIP: */
675
+ /* case GRN_PATSNIP: */
676
+ /* case GRN_CURSOR_TABLE_HASH_KEY: */
677
+ /* case GRN_CURSOR_TABLE_PAT_KEY: */
678
+ /* case GRN_CURSOR_TABLE_NO_KEY: */
679
+ /* case GRN_CURSOR_COLUMN_INDEX: */
680
+ /* case GRN_TYPE: */
681
+ /* case GRN_PROC: */
682
+ /* case GRN_EXPR: */
683
+ /* case GRN_TABLE_HASH_KEY: */
684
+ /* case GRN_TABLE_PAT_KEY: */
685
+ /* case GRN_TABLE_NO_KEY: */
686
+ /* case GRN_DB: */
687
+ /* case GRN_COLUMN_FIX_SIZE: */
688
+ /* case GRN_COLUMN_VAR_SIZE: */
689
+ /* case GRN_COLUMN_INDEX: */
690
+ default:
691
+ rb_raise(rb_eTypeError,
692
+ "unsupported groonga object: 0x%x: <%s>",
693
+ obj->header.type,
694
+ rb_grn_inspect(related_object));
695
+ break;
696
+ }
697
+
698
+ return Qnil;
699
+ }
700
+
574
701
  void
575
702
  rb_grn_init_utils (VALUE mGrn)
576
703
  {
@@ -0,0 +1,36 @@
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) ((RbGrnVariableSizeColumn *)DATA_PTR(object))
22
+
23
+ VALUE rb_cGrnVariableSizeColumn;
24
+
25
+ /*
26
+ * Document-class: Groonga::FixSizeColumn < Groonga::Column
27
+ *
28
+ * 可変長データ用のカラム。
29
+ */
30
+
31
+ void
32
+ rb_grn_init_variable_size_column (VALUE mGrn)
33
+ {
34
+ rb_cGrnVariableSizeColumn =
35
+ rb_define_class_under(mGrn, "VariableSizeColumn", rb_cGrnColumn);
36
+ }
@@ -0,0 +1,90 @@
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) ((RbGrnVariable *)DATA_PTR(object))
22
+
23
+ VALUE rb_cGrnVariable;
24
+
25
+ grn_obj *
26
+ rb_grn_variable_from_ruby_object (VALUE variable, grn_ctx **context)
27
+ {
28
+ return rb_grn_object_from_ruby_object(variable, context);
29
+ }
30
+
31
+ VALUE
32
+ rb_grn_variable_to_ruby_object (grn_ctx *context, grn_obj *variable)
33
+ {
34
+ return rb_grn_object_to_ruby_object(rb_cGrnVariable, context, variable,
35
+ RB_GRN_TRUE);
36
+ }
37
+
38
+ void
39
+ rb_grn_variable_deconstruct (RbGrnVariable *rb_grn_variable,
40
+ grn_obj **variable,
41
+ grn_ctx **context,
42
+ grn_id *domain_id,
43
+ grn_obj **domain,
44
+ grn_id *range_id,
45
+ grn_obj **range)
46
+ {
47
+ RbGrnObject *rb_grn_object;
48
+
49
+ rb_grn_object = RB_GRN_OBJECT(rb_grn_variable);
50
+ rb_grn_object_deconstruct(rb_grn_object, variable, context,
51
+ domain_id, domain,
52
+ range_id, range);
53
+ }
54
+
55
+ static VALUE
56
+ rb_grn_variable_get_value (VALUE self)
57
+ {
58
+ grn_ctx *context = NULL;
59
+ grn_obj *variable;
60
+
61
+ rb_grn_variable_deconstruct(SELF(self), &variable, &context,
62
+ NULL, NULL,
63
+ NULL, NULL);
64
+
65
+ return GRNOBJ2RVAL(Qnil, context, variable, self);
66
+ }
67
+
68
+ static VALUE
69
+ rb_grn_variable_set_value (VALUE self, VALUE value)
70
+ {
71
+ grn_ctx *context = NULL;
72
+ grn_obj *variable;
73
+
74
+ rb_grn_variable_deconstruct(SELF(self), &variable, &context,
75
+ NULL, NULL,
76
+ NULL, NULL);
77
+ RVAL2GRNOBJ(value, context, &variable);
78
+ return Qnil;
79
+ }
80
+
81
+ void
82
+ rb_grn_init_variable (VALUE mGrn)
83
+ {
84
+ rb_cGrnVariable = rb_define_class_under(mGrn, "Variable", rb_cGrnObject);
85
+
86
+ rb_define_method(rb_cGrnVariable, "value",
87
+ rb_grn_variable_get_value, 0);
88
+ rb_define_method(rb_cGrnVariable, "value=",
89
+ rb_grn_variable_set_value, 1);
90
+ }
data/ext/rb-grn.h CHANGED
@@ -57,9 +57,15 @@ RB_GRN_BEGIN_DECLS
57
57
  # define RB_GRN_VAR extern
58
58
  #endif
59
59
 
60
+ #ifdef RB_GRN_DEBUG
61
+ # define debug(...) printf(__VA_ARGS__)
62
+ #else
63
+ # define debug(...)
64
+ #endif
65
+
60
66
  #define RB_GRN_MAJOR_VERSION 0
61
67
  #define RB_GRN_MINOR_VERSION 0
62
- #define RB_GRN_MICRO_VERSION 2
68
+ #define RB_GRN_MICRO_VERSION 3
63
69
 
64
70
  typedef int rb_grn_boolean;
65
71
  #define RB_GRN_FALSE (0)
@@ -76,8 +82,11 @@ typedef struct {
76
82
 
77
83
  #define RB_GRN_OBJECT(object) ((RbGrnObject *)(object))
78
84
  #define RB_GRN_TABLE(object) ((RbGrnTable *)(object))
85
+ #define RB_GRN_TABLE_KEY_SUPPORT(object) ((RbGrnTableKeySupport *)(object))
79
86
  #define RB_GRN_TABLE_CURSOR(object) ((RbGrnTableCursort *)(object))
87
+ #define RB_GRN_COLUMN(object) ((RbGrnColumn *)(object))
80
88
  #define RB_GRN_INDEX_COLUMN(object) ((RbGrnIndexColumn *)(object))
89
+ #define RB_GRN_EXPRESSION(object) ((RbGrnExpression *)(object))
81
90
  #define RB_GRN_UNBIND_FUNCTION(function) ((RbGrnUnbindFunction)(function))
82
91
 
83
92
  typedef void (*RbGrnUnbindFunction) (void *object);
@@ -85,14 +94,14 @@ typedef void (*RbGrnUnbindFunction) (void *object);
85
94
  typedef struct _RbGrnObject RbGrnObject;
86
95
  struct _RbGrnObject
87
96
  {
97
+ VALUE self;
88
98
  grn_ctx *context;
89
99
  grn_obj *object;
90
100
  grn_obj *domain;
91
101
  grn_id domain_id;
92
102
  grn_obj *range;
93
103
  grn_id range_id;
94
- rb_grn_boolean owner;
95
- RbGrnUnbindFunction unbind;
104
+ rb_grn_boolean need_close;
96
105
  };
97
106
 
98
107
  typedef struct _RbGrnTable RbGrnTable;
@@ -116,18 +125,10 @@ struct _RbGrnColumn
116
125
  grn_obj *value;
117
126
  };
118
127
 
119
- typedef struct _RbGrnFixSizeColumn RbGrnFixSizeColumn;
120
- struct _RbGrnFixSizeColumn
121
- {
122
- RbGrnObject parent;
123
- grn_obj *value;
124
- };
125
-
126
128
  typedef struct _RbGrnIndexColumn RbGrnIndexColumn;
127
129
  struct _RbGrnIndexColumn
128
130
  {
129
- RbGrnObject parent;
130
- grn_obj *value;
131
+ RbGrnColumn parent;
131
132
  grn_obj *old_value;
132
133
  grn_obj *id_query;
133
134
  grn_obj *string_query;
@@ -139,6 +140,19 @@ struct _RbGrnTableCursor
139
140
  RbGrnObject parent;
140
141
  };
141
142
 
143
+ typedef struct _RbGrnVariable RbGrnVariable;
144
+ struct _RbGrnVariable
145
+ {
146
+ RbGrnObject parent;
147
+ };
148
+
149
+ typedef struct _RbGrnExpression RbGrnExpression;
150
+ struct _RbGrnExpression
151
+ {
152
+ RbGrnObject parent;
153
+ grn_obj *value;
154
+ };
155
+
142
156
  RB_GRN_VAR VALUE rb_eGrnError;
143
157
  RB_GRN_VAR VALUE rb_cGrnObject;
144
158
  RB_GRN_VAR VALUE rb_mGrnEncodingSupport;
@@ -157,13 +171,18 @@ RB_GRN_VAR VALUE rb_cGrnType;
157
171
  RB_GRN_VAR VALUE rb_cGrnProcedure;
158
172
  RB_GRN_VAR VALUE rb_cGrnColumn;
159
173
  RB_GRN_VAR VALUE rb_cGrnFixSizeColumn;
160
- RB_GRN_VAR VALUE rb_cGrnVarSizeColumn;
174
+ RB_GRN_VAR VALUE rb_cGrnVariableSizeColumn;
161
175
  RB_GRN_VAR VALUE rb_cGrnIndexColumn;
162
176
  RB_GRN_VAR VALUE rb_cGrnAccessor;
163
177
  RB_GRN_VAR VALUE rb_cGrnRecord;
164
178
  RB_GRN_VAR VALUE rb_cGrnQuery;
165
179
  RB_GRN_VAR VALUE rb_cGrnLogger;
166
180
  RB_GRN_VAR VALUE rb_cGrnSnippet;
181
+ RB_GRN_VAR VALUE rb_cGrnVariable;
182
+ RB_GRN_VAR VALUE rb_cGrnOperation;
183
+ RB_GRN_VAR VALUE rb_cGrnExpression;
184
+ RB_GRN_VAR VALUE rb_cGrnRecordExpressionBuilder;
185
+ RB_GRN_VAR VALUE rb_cGrnColumnExpressionBuilder;
167
186
 
168
187
  void rb_grn_init_utils (VALUE mGrn);
169
188
  void rb_grn_init_exception (VALUE mGrn);
@@ -186,10 +205,15 @@ void rb_grn_init_type (VALUE mGrn);
186
205
  void rb_grn_init_procedure (VALUE mGrn);
187
206
  void rb_grn_init_column (VALUE mGrn);
188
207
  void rb_grn_init_fix_size_column (VALUE mGrn);
208
+ void rb_grn_init_variable_size_column (VALUE mGrn);
189
209
  void rb_grn_init_index_column (VALUE mGrn);
190
210
  void rb_grn_init_accessor (VALUE mGrn);
191
211
  void rb_grn_init_record (VALUE mGrn);
192
212
  void rb_grn_init_query (VALUE mGrn);
213
+ void rb_grn_init_variable (VALUE mGrn);
214
+ void rb_grn_init_operation (VALUE mGrn);
215
+ void rb_grn_init_expression (VALUE mGrn);
216
+ void rb_grn_init_expression_builder (VALUE mGrn);
193
217
  void rb_grn_init_logger (VALUE mGrn);
194
218
  void rb_grn_init_snippet (VALUE mGrn);
195
219
 
@@ -210,6 +234,10 @@ VALUE rb_grn_context_to_exception (grn_ctx *context,
210
234
  VALUE related_object);
211
235
  void rb_grn_context_check (grn_ctx *context,
212
236
  VALUE related_object);
237
+ grn_obj *rb_grn_context_get_backward_compatibility
238
+ (grn_ctx *context,
239
+ const char *name,
240
+ unsigned int name_size);
213
241
 
214
242
  const char *rb_grn_inspect (VALUE object);
215
243
  void rb_grn_scan_options (VALUE options, ...)
@@ -218,16 +246,17 @@ rb_grn_boolean rb_grn_equal_option (VALUE option,
218
246
  const char *key);
219
247
 
220
248
  VALUE rb_grn_object_alloc (VALUE klass);
221
- void rb_grn_object_bind (RbGrnObject *rb_grn_object,
249
+ void rb_grn_object_bind (VALUE self,
250
+ VALUE rb_context,
251
+ RbGrnObject *rb_grn_object,
222
252
  grn_ctx *context,
223
- grn_obj *object,
224
- rb_grn_boolean owner);
225
- void rb_grn_object_unbind (RbGrnObject *rb_grn_object);
226
- void rb_grn_object_assign (VALUE self,
253
+ grn_obj *object);
254
+ void rb_grn_object_free (RbGrnObject *rb_grn_object);
255
+ void rb_grn_object_assign (VALUE klass,
256
+ VALUE self,
227
257
  VALUE rb_context,
228
258
  grn_ctx *context,
229
- grn_obj *object,
230
- rb_grn_boolean owner);
259
+ grn_obj *object);
231
260
  void rb_grn_object_deconstruct (RbGrnObject *rb_grn_object,
232
261
  grn_obj **object,
233
262
  grn_ctx **context,
@@ -252,12 +281,12 @@ VALUE rb_grn_object_inspect_content (VALUE object,
252
281
  VALUE rb_grn_object_inspect_footer (VALUE object,
253
282
  VALUE inspected);
254
283
 
255
- VALUE rb_grn_table_alloc (VALUE klass);
256
284
  void rb_grn_table_bind (RbGrnTable *rb_grn_table,
257
285
  grn_ctx *context,
258
- grn_obj *table_key_support,
259
- rb_grn_boolean owner);
260
- void rb_grn_table_unbind (RbGrnTable *rb_grn_table);
286
+ grn_obj *table_key_support);
287
+ void rb_grn_table_finalizer (grn_ctx *context,
288
+ grn_obj *grn_object,
289
+ RbGrnTable *rb_grn_table);
261
290
  void rb_grn_table_assign (VALUE self,
262
291
  VALUE rb_context,
263
292
  grn_ctx *context,
@@ -293,17 +322,12 @@ grn_ctx *rb_grn_table_cursor_ensure_context (VALUE cursor,
293
322
  VALUE *rb_context);
294
323
  VALUE rb_grn_table_cursor_close (VALUE object);
295
324
 
296
- VALUE rb_grn_table_key_support_alloc (VALUE klass);
297
325
  void rb_grn_table_key_support_bind (RbGrnTableKeySupport *rb_grn_table_key_support,
298
326
  grn_ctx *context,
299
- grn_obj *table_key_support,
300
- rb_grn_boolean owner);
301
- void rb_grn_table_key_support_unbind (RbGrnTableKeySupport *rb_grn_table_key_support);
302
- void rb_grn_table_key_support_assign (VALUE self,
303
- VALUE rb_context,
304
- grn_ctx *context,
305
- grn_obj *table_key_support,
306
- rb_grn_boolean owner);
327
+ grn_obj *table_key_support);
328
+ void rb_grn_table_key_support_finalizer (grn_ctx *context,
329
+ grn_obj *grn_object,
330
+ RbGrnTableKeySupport *rb_grn_table_key_support);
307
331
  void rb_grn_table_key_support_deconstruct (RbGrnTableKeySupport *rb_grn_table_key_support,
308
332
  grn_obj **table_key_support,
309
333
  grn_ctx **context,
@@ -316,18 +340,13 @@ void rb_grn_table_key_support_deconstruct (RbGrnTableKeySupport *rb_gr
316
340
  grn_id rb_grn_table_key_support_get (VALUE self,
317
341
  VALUE rb_key);
318
342
 
319
- VALUE rb_grn_fix_size_column_alloc (VALUE klass);
320
- void rb_grn_fix_size_column_bind (RbGrnFixSizeColumn *rb_grn_fix_size_column,
321
- grn_ctx *context,
322
- grn_obj *column_key_support,
323
- rb_grn_boolean owner);
324
- void rb_grn_fix_size_column_unbind (RbGrnFixSizeColumn *rb_grn_fix_size_column);
325
- void rb_grn_fix_size_column_assign (VALUE self,
326
- VALUE rb_context,
343
+ void rb_grn_column_bind (RbGrnColumn *rb_grn_column,
327
344
  grn_ctx *context,
345
+ grn_obj *column);
346
+ void rb_grn_column_finalizer (grn_ctx *context,
328
347
  grn_obj *column,
329
- rb_grn_boolean owner);
330
- void rb_grn_fix_size_column_deconstruct (RbGrnFixSizeColumn *rb_grn_fix_size_column,
348
+ RbGrnColumn *rb_grn_column);
349
+ void rb_grn_column_deconstruct (RbGrnColumn *rb_grn_column,
331
350
  grn_obj **column,
332
351
  grn_ctx **context,
333
352
  grn_id *domain_id,
@@ -336,17 +355,12 @@ void rb_grn_fix_size_column_deconstruct (RbGrnFixSizeColumn *rb_grn_
336
355
  grn_id *range_id,
337
356
  grn_obj **range);
338
357
 
339
- VALUE rb_grn_index_column_alloc (VALUE klass);
340
358
  void rb_grn_index_column_bind (RbGrnIndexColumn *rb_grn_index_column,
341
359
  grn_ctx *context,
342
- grn_obj *column_key_support,
343
- rb_grn_boolean owner);
344
- void rb_grn_index_column_unbind (RbGrnIndexColumn *rb_grn_index_column);
345
- void rb_grn_index_column_assign (VALUE self,
346
- VALUE rb_context,
347
- grn_ctx *context,
348
- grn_obj *column,
349
- rb_grn_boolean owner);
360
+ grn_obj *object);
361
+ void rb_grn_index_column_finalizer (grn_ctx *context,
362
+ grn_obj *grn_object,
363
+ RbGrnIndexColumn *rb_grn_index_column);
350
364
  void rb_grn_index_column_deconstruct (RbGrnIndexColumn *rb_grn_index_column,
351
365
  grn_obj **column,
352
366
  grn_ctx **context,
@@ -359,10 +373,27 @@ void rb_grn_index_column_deconstruct (RbGrnIndexColumn *rb_grn_in
359
373
  grn_obj **id_query,
360
374
  grn_obj **string_query);
361
375
 
376
+ void rb_grn_expression_bind (RbGrnExpression *rb_grn_expression,
377
+ grn_ctx *context,
378
+ grn_obj *expression);
379
+ void rb_grn_expression_finalizer (grn_ctx *context,
380
+ grn_obj *grn_object,
381
+ RbGrnExpression *rb_grn_expression);
382
+
362
383
  VALUE rb_grn_record_new (VALUE table,
363
384
  grn_id id,
364
385
  VALUE values);
365
386
 
387
+ VALUE rb_grn_record_expression_builder_new (VALUE table,
388
+ VALUE name);
389
+ VALUE rb_grn_record_expression_builder_build
390
+ (VALUE self);
391
+ VALUE rb_grn_column_expression_builder_new (VALUE column,
392
+ VALUE name,
393
+ VALUE query);
394
+ VALUE rb_grn_column_expression_builder_build
395
+ (VALUE self);
396
+
366
397
 
367
398
  #define RB_GRN_INTERN(string) (ID2SYM(rb_intern(string)))
368
399
 
@@ -382,6 +413,12 @@ VALUE rb_grn_record_new (VALUE table,
382
413
  (rb_grn_object_to_ruby_object(klass, context, object, owner))
383
414
  #define GRNOBJECT2RCLASS(object) (rb_grn_object_to_ruby_class(object))
384
415
 
416
+ /* TODO: MORE BETTER NAME!!! PLEASE!!! */
417
+ #define RVAL2GRNOBJ(rb_object, context, object) \
418
+ (rb_grn_obj_from_ruby_object(rb_object, context, object))
419
+ #define GRNOBJ2RVAL(klass, context, object, related_object) \
420
+ (rb_grn_obj_to_ruby_object(klass, context, object, related_object))
421
+
385
422
  #define RVAL2GRNDB(object) (rb_grn_database_from_ruby_object(object))
386
423
  #define GRNDB2RVAL(context, db, owner) \
387
424
  (rb_grn_database_to_ruby_object(context, db, owner))
@@ -403,7 +440,7 @@ VALUE rb_grn_record_new (VALUE table,
403
440
  #define RVAL2GRNQUERY(object) (rb_grn_query_from_ruby_object(object))
404
441
  #define GRNQUERY2RVAL(context, column)(rb_grn_query_to_ruby_object(context, column))
405
442
 
406
- #define RVAL2GRNSELECTOPERATOR(object)(rb_grn_select_operator_from_ruby_object(object))
443
+ #define RVAL2GRNOPERATOR(object) (rb_grn_operator_from_ruby_object(object))
407
444
 
408
445
  #define RVAL2GRNLOGGER(object) (rb_grn_logger_from_ruby_object(object))
409
446
 
@@ -436,6 +473,11 @@ VALUE rb_grn_record_new (VALUE table,
436
473
  (rb_grn_key_from_ruby_object(object, context, key, domain_id, \
437
474
  domain, related_object))
438
475
 
476
+ #define GRNVARIABLE2RVAL(context, variable) \
477
+ (rb_grn_variable_to_ruby_object(context, variable))
478
+ #define RVAL2GRNVARIABLE(object, context) \
479
+ (rb_grn_variable_from_ruby_object(object, context))
480
+
439
481
 
440
482
  grn_encoding rb_grn_encoding_from_ruby_object (VALUE object,
441
483
  grn_ctx *context);
@@ -490,9 +532,7 @@ grn_query *rb_grn_query_from_ruby_object (VALUE object);
490
532
  VALUE rb_grn_query_to_ruby_object (grn_ctx *context,
491
533
  grn_query *query);
492
534
 
493
- grn_sel_operator
494
- rb_grn_select_operator_from_ruby_object
495
- (VALUE object);
535
+ grn_operator rb_grn_operator_from_ruby_object (VALUE object);
496
536
 
497
537
  grn_logger_info *
498
538
  rb_grn_logger_from_ruby_object (VALUE object);
@@ -542,6 +582,19 @@ grn_obj *rb_grn_key_from_ruby_object (VALUE rb_key,
542
582
  grn_obj *domain,
543
583
  VALUE related_object);
544
584
 
585
+ VALUE rb_grn_variable_to_ruby_object (grn_ctx *context,
586
+ grn_obj *variable);
587
+ grn_obj *rb_grn_variable_from_ruby_object (VALUE rb_variable,
588
+ grn_ctx **context);
589
+
590
+ grn_obj *rb_grn_obj_from_ruby_object (VALUE rb_object,
591
+ grn_ctx *context,
592
+ grn_obj **obj);
593
+ VALUE rb_grn_obj_to_ruby_object (VALUE klass,
594
+ grn_ctx *context,
595
+ grn_obj *obj,
596
+ VALUE related_object);
597
+
545
598
  RB_GRN_END_DECLS
546
599
 
547
600
  #endif