rroonga 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. data/README.textile +71 -0
  2. data/Rakefile +213 -128
  3. data/TODO +0 -0
  4. data/example/bookmark.rb +12 -12
  5. data/ext/groonga/Makefile +233 -0
  6. data/ext/groonga/extconf.rb +1 -1
  7. data/ext/groonga/rb-grn-column.c +5 -5
  8. data/ext/groonga/rb-grn-index-column.c +31 -0
  9. data/ext/groonga/rb-grn-index-cursor.c +106 -0
  10. data/ext/groonga/rb-grn-logger.c +5 -5
  11. data/ext/groonga/rb-grn-object.c +48 -0
  12. data/ext/groonga/rb-grn-patricia-trie.c +1 -1
  13. data/ext/groonga/rb-grn-plugin.c +32 -0
  14. data/ext/groonga/rb-grn-posting.c +51 -0
  15. data/ext/groonga/rb-grn-table-cursor.c +6 -1
  16. data/ext/groonga/rb-grn-table.c +31 -13
  17. data/ext/groonga/rb-grn.h +21 -3
  18. data/ext/groonga/rb-groonga.c +3 -1
  19. data/lib/groonga.rb +1 -0
  20. data/lib/groonga/dumper.rb +25 -5
  21. data/lib/groonga/expression-builder.rb +2 -2
  22. data/lib/groonga/pagination.rb +99 -7
  23. data/lib/groonga/posting.rb +87 -0
  24. data/lib/groonga/record.rb +118 -11
  25. data/lib/groonga/schema.rb +18 -1
  26. data/test/groonga-test-utils.rb +1 -6
  27. data/test/run-test.rb +13 -28
  28. data/test/test-column.rb +4 -0
  29. data/test/test-database-dumper.rb +53 -10
  30. data/test/test-hash.rb +6 -6
  31. data/test/test-index-cursor.rb +93 -0
  32. data/test/test-plugin.rb +6 -0
  33. data/test/test-record.rb +162 -1
  34. data/test/test-schema-type.rb +6 -0
  35. data/test/test-schema.rb +17 -0
  36. data/test/test-table.rb +7 -2
  37. data/test/test-type.rb +9 -1
  38. metadata +135 -245
  39. data/AUTHORS +0 -5
  40. data/NEWS.ja.rdoc +0 -344
  41. data/NEWS.rdoc +0 -346
  42. data/README.ja.rdoc +0 -68
  43. data/README.rdoc +0 -68
  44. data/example/search/config.ru +0 -230
  45. data/example/search/public/css/groonga.css +0 -122
  46. data/ext/.gitignore +0 -2
  47. data/html/bar.svg +0 -153
  48. data/html/developer.html +0 -151
  49. data/html/developer.svg +0 -469
  50. data/html/download.svg +0 -253
  51. data/html/favicon.ico +0 -0
  52. data/html/favicon.svg +0 -591
  53. data/html/footer.html.erb +0 -33
  54. data/html/head.html.erb +0 -4
  55. data/html/header.html.erb +0 -17
  56. data/html/heading-mark.svg +0 -393
  57. data/html/index.html +0 -243
  58. data/html/install.svg +0 -636
  59. data/html/logo.svg +0 -612
  60. data/html/ranguba.css +0 -342
  61. data/html/readme.svg +0 -256
  62. data/html/tutorial.svg +0 -559
  63. data/license/LGPL +0 -504
  64. data/test-unit-notify/Rakefile +0 -47
  65. data/test-unit-notify/lib/test/unit/notify.rb +0 -104
  66. data/test-unit/COPYING +0 -56
  67. data/test-unit/GPL +0 -340
  68. data/test-unit/PSFL +0 -271
  69. data/test-unit/Rakefile +0 -53
  70. data/test-unit/TODO +0 -5
  71. data/test-unit/bin/testrb +0 -5
  72. data/test-unit/html/bar.svg +0 -153
  73. data/test-unit/html/developer.svg +0 -469
  74. data/test-unit/html/favicon.ico +0 -0
  75. data/test-unit/html/favicon.svg +0 -82
  76. data/test-unit/html/heading-mark.svg +0 -393
  77. data/test-unit/html/index.html +0 -247
  78. data/test-unit/html/index.html.ja +0 -270
  79. data/test-unit/html/install.svg +0 -636
  80. data/test-unit/html/logo.svg +0 -483
  81. data/test-unit/html/test-unit.css +0 -339
  82. data/test-unit/html/tutorial.svg +0 -559
  83. data/test-unit/lib/test/unit.rb +0 -328
  84. data/test-unit/lib/test/unit/assertionfailederror.rb +0 -25
  85. data/test-unit/lib/test/unit/assertions.rb +0 -1334
  86. data/test-unit/lib/test/unit/attribute.rb +0 -125
  87. data/test-unit/lib/test/unit/autorunner.rb +0 -363
  88. data/test-unit/lib/test/unit/collector.rb +0 -36
  89. data/test-unit/lib/test/unit/collector/descendant.rb +0 -23
  90. data/test-unit/lib/test/unit/collector/dir.rb +0 -108
  91. data/test-unit/lib/test/unit/collector/load.rb +0 -144
  92. data/test-unit/lib/test/unit/collector/objectspace.rb +0 -34
  93. data/test-unit/lib/test/unit/color-scheme.rb +0 -106
  94. data/test-unit/lib/test/unit/color.rb +0 -96
  95. data/test-unit/lib/test/unit/diff.rb +0 -740
  96. data/test-unit/lib/test/unit/error.rb +0 -130
  97. data/test-unit/lib/test/unit/exceptionhandler.rb +0 -39
  98. data/test-unit/lib/test/unit/failure.rb +0 -136
  99. data/test-unit/lib/test/unit/fixture.rb +0 -176
  100. data/test-unit/lib/test/unit/notification.rb +0 -129
  101. data/test-unit/lib/test/unit/omission.rb +0 -191
  102. data/test-unit/lib/test/unit/pending.rb +0 -150
  103. data/test-unit/lib/test/unit/priority.rb +0 -180
  104. data/test-unit/lib/test/unit/runner/console.rb +0 -52
  105. data/test-unit/lib/test/unit/runner/emacs.rb +0 -8
  106. data/test-unit/lib/test/unit/runner/tap.rb +0 -8
  107. data/test-unit/lib/test/unit/testcase.rb +0 -483
  108. data/test-unit/lib/test/unit/testresult.rb +0 -121
  109. data/test-unit/lib/test/unit/testsuite.rb +0 -110
  110. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +0 -14
  111. data/test-unit/lib/test/unit/ui/console/testrunner.rb +0 -430
  112. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +0 -63
  113. data/test-unit/lib/test/unit/ui/tap/testrunner.rb +0 -82
  114. data/test-unit/lib/test/unit/ui/testrunner.rb +0 -53
  115. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +0 -77
  116. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +0 -41
  117. data/test-unit/lib/test/unit/util/backtracefilter.rb +0 -42
  118. data/test-unit/lib/test/unit/util/method-owner-finder.rb +0 -28
  119. data/test-unit/lib/test/unit/util/observable.rb +0 -90
  120. data/test-unit/lib/test/unit/util/output.rb +0 -31
  121. data/test-unit/lib/test/unit/util/procwrapper.rb +0 -48
  122. data/test-unit/lib/test/unit/version.rb +0 -7
  123. data/test-unit/sample/adder.rb +0 -13
  124. data/test-unit/sample/subtracter.rb +0 -12
  125. data/test-unit/sample/test_adder.rb +0 -20
  126. data/test-unit/sample/test_subtracter.rb +0 -20
  127. data/test-unit/sample/test_user.rb +0 -23
  128. data/test-unit/test/collector/test-descendant.rb +0 -133
  129. data/test-unit/test/collector/test-load.rb +0 -442
  130. data/test-unit/test/collector/test_dir.rb +0 -406
  131. data/test-unit/test/collector/test_objectspace.rb +0 -100
  132. data/test-unit/test/run-test.rb +0 -15
  133. data/test-unit/test/test-attribute.rb +0 -86
  134. data/test-unit/test/test-color-scheme.rb +0 -69
  135. data/test-unit/test/test-color.rb +0 -47
  136. data/test-unit/test/test-diff.rb +0 -518
  137. data/test-unit/test/test-emacs-runner.rb +0 -60
  138. data/test-unit/test/test-fixture.rb +0 -287
  139. data/test-unit/test/test-notification.rb +0 -33
  140. data/test-unit/test/test-omission.rb +0 -81
  141. data/test-unit/test/test-pending.rb +0 -70
  142. data/test-unit/test/test-priority.rb +0 -119
  143. data/test-unit/test/test-testcase.rb +0 -544
  144. data/test-unit/test/test_assertions.rb +0 -1197
  145. data/test-unit/test/test_error.rb +0 -26
  146. data/test-unit/test/test_failure.rb +0 -33
  147. data/test-unit/test/test_testresult.rb +0 -113
  148. data/test-unit/test/test_testsuite.rb +0 -129
  149. data/test-unit/test/testunit-test-util.rb +0 -14
  150. data/test-unit/test/ui/test_tap.rb +0 -33
  151. data/test-unit/test/ui/test_testrunmediator.rb +0 -20
  152. data/test-unit/test/util/test-method-owner-finder.rb +0 -38
  153. data/test-unit/test/util/test-output.rb +0 -11
  154. data/test-unit/test/util/test_backtracefilter.rb +0 -41
  155. data/test-unit/test/util/test_observable.rb +0 -102
  156. data/test-unit/test/util/test_procwrapper.rb +0 -36
  157. data/test/.gitignore +0 -1
  158. data/text/expression.rdoc +0 -285
  159. data/text/tutorial.ja.rdoc +0 -433
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby" -*- */
2
2
  /*
3
- Copyright (C) 2009-2010 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2009-2011 Kouhei Sutou <kou@clear-code.com>
4
4
 
5
5
  This library is free software; you can redistribute it and/or
6
6
  modify it under the terms of the GNU Lesser General Public
@@ -392,7 +392,7 @@ rb_grn_logger_s_set_path (VALUE klass, VALUE rb_path,
392
392
 
393
393
  /*
394
394
  * call-seq:
395
- * Groonga::Logger.log_path # => log_path
395
+ * Groonga::Logger.log_path # => path
396
396
  *
397
397
  * groongaのデフォルトロガーがログを出力するファイルの
398
398
  * パスを返す。
@@ -414,7 +414,7 @@ rb_grn_logger_s_get_log_path (VALUE klass)
414
414
 
415
415
  /*
416
416
  * call-seq:
417
- * Groonga::Logger.log_path = log_path
417
+ * Groonga::Logger.log_path= path
418
418
  *
419
419
  * groongaのデフォルトロガーがログを出力するファイルのパスを
420
420
  * 指定する。
@@ -435,7 +435,7 @@ rb_grn_logger_s_set_log_path (VALUE klass, VALUE path)
435
435
 
436
436
  /*
437
437
  * call-seq:
438
- * Groonga::Logger.query_log_path # => query_log_path
438
+ * Groonga::Logger.query_log_path # => path
439
439
  *
440
440
  * groongaのデフォルトロガーがクエリログを出力するファイルの
441
441
  * パスを返す。
@@ -457,7 +457,7 @@ rb_grn_logger_s_get_query_log_path (VALUE klass)
457
457
 
458
458
  /*
459
459
  * call-seq:
460
- * Groonga::Logger.query_log_path = query_log_path
460
+ * Groonga::Logger.query_log_path= path
461
461
  *
462
462
  * groongaのデフォルトロガーがクエリログを出力するファイルの
463
463
  * パスを指定する。
@@ -123,6 +123,8 @@ rb_grn_object_finalizer (grn_ctx *context, int n_args, grn_obj **grn_objects,
123
123
  rb_grn_table_finalizer(context, grn_object,
124
124
  RB_GRN_TABLE(rb_grn_object));
125
125
  break;
126
+ case GRN_CURSOR_COLUMN_INDEX:
127
+ break;
126
128
  case GRN_COLUMN_FIX_SIZE:
127
129
  case GRN_COLUMN_VAR_SIZE:
128
130
  rb_grn_column_finalizer(context, grn_object,
@@ -351,6 +353,7 @@ rb_grn_object_assign (VALUE klass, VALUE self, VALUE rb_context,
351
353
  klass == rb_cGrnPatriciaTrieCursor ||
352
354
  klass == rb_cGrnArrayCursor ||
353
355
  klass == rb_cGrnViewCursor ||
356
+ klass == rb_cGrnIndexCursor ||
354
357
  klass == rb_cGrnProcedure ||
355
358
  klass == rb_cGrnVariable) {
356
359
  rb_grn_object = ALLOC(RbGrnObject);
@@ -499,10 +502,33 @@ rb_grn_object_close (VALUE self)
499
502
  grn_obj *object;
500
503
  grn_ctx *context;
501
504
 
505
+ rb_grn_object_deconstruct(SELF(self), &object, &context,
506
+ NULL, NULL, NULL, NULL);
507
+ if (object && context)
508
+ grn_obj_close(context, object);
509
+
510
+ return Qnil;
511
+ }
512
+
513
+ /*
514
+ * Document-method: unlink
515
+ *
516
+ * call-seq:
517
+ * object.unlink
518
+ *
519
+ * _object_のリファレンスカウンタを1減少する。
520
+ */
521
+ VALUE
522
+ rb_grn_object_unlink (VALUE self)
523
+ {
524
+ grn_obj *object;
525
+ grn_ctx *context;
526
+
502
527
  rb_grn_object_deconstruct(SELF(self), &object, &context,
503
528
  NULL, NULL, NULL, NULL);
504
529
  if (object && context)
505
530
  grn_obj_unlink(context, object);
531
+
506
532
  return Qnil;
507
533
  }
508
534
 
@@ -1343,6 +1369,23 @@ rb_grn_object_remove (VALUE self)
1343
1369
  return Qnil;
1344
1370
  }
1345
1371
 
1372
+ static VALUE
1373
+ rb_grn_object_builtin_p (VALUE self)
1374
+ {
1375
+ grn_ctx *context;
1376
+ grn_obj *object;
1377
+ grn_bool builtin = GRN_FALSE;
1378
+
1379
+ rb_grn_object_deconstruct(SELF(self), &object, &context,
1380
+ NULL, NULL, NULL, NULL);
1381
+
1382
+ if (context && object) {
1383
+ builtin = grn_obj_is_builtin(context, object);
1384
+ }
1385
+
1386
+ return CBOOL2RVAL(builtin);
1387
+ }
1388
+
1346
1389
  void
1347
1390
  rb_grn_init_object (VALUE mGrn)
1348
1391
  {
@@ -1368,10 +1411,15 @@ rb_grn_init_object (VALUE mGrn)
1368
1411
  rb_define_method(rb_cGrnObject, "close", rb_grn_object_close, 0);
1369
1412
  rb_define_method(rb_cGrnObject, "closed?", rb_grn_object_closed_p, 0);
1370
1413
 
1414
+ rb_define_method(rb_cGrnObject, "unlink", rb_grn_object_unlink, 0);
1415
+
1371
1416
  rb_define_method(rb_cGrnObject, "[]", rb_grn_object_array_reference, 1);
1372
1417
  rb_define_method(rb_cGrnObject, "[]=", rb_grn_object_array_set, 2);
1373
1418
  rb_define_method(rb_cGrnObject, "append", rb_grn_object_append_value, 2);
1374
1419
  rb_define_method(rb_cGrnObject, "prepend", rb_grn_object_prepend_value, 2);
1375
1420
 
1376
1421
  rb_define_method(rb_cGrnObject, "remove", rb_grn_object_remove, 0);
1422
+
1423
+ rb_define_method(rb_cGrnObject, "builtin?", rb_grn_object_builtin_p, 0);
1424
+
1377
1425
  }
@@ -346,7 +346,7 @@ rb_grn_patricia_trie_search (int argc, VALUE *argv, VALUE self)
346
346
  * _string_内での_word_の出現位置。(バイト単位)
347
347
  *
348
348
  * [_length_]
349
- * _word_の長さ。(バイト探知)
349
+ * _word_の長さ。(バイト単位)
350
350
  *
351
351
  * ブロックを指定しない場合は、マッチした部分文字列の情報を
352
352
  * まとめて配列として返す。
@@ -123,6 +123,34 @@ rb_grn_plugin_s_register (int argc, VALUE *argv, VALUE klass)
123
123
  return Qnil;
124
124
  }
125
125
 
126
+ /**
127
+ * call-seq:
128
+ * Groonga::Plugin.system_plugins_dir
129
+ *
130
+ * Returns the system plugins directory.
131
+ *
132
+ * @return The system plugins directory.
133
+ */
134
+ static VALUE
135
+ rb_grn_plugin_s_system_plugins_dir (VALUE klass)
136
+ {
137
+ return rb_str_new2(grn_plugin_get_system_plugins_dir());
138
+ }
139
+
140
+ /**
141
+ * call-seq:
142
+ * Groonga::Plugin.suffix
143
+ *
144
+ * Returns the plugin file suffix. (e.g. ".so", ".dll" and so on.)
145
+ *
146
+ * @return The plugin file suffix.
147
+ */
148
+ static VALUE
149
+ rb_grn_plugin_s_suffix (VALUE klass)
150
+ {
151
+ return rb_str_new2(grn_plugin_get_suffix());
152
+ }
153
+
126
154
  void
127
155
  rb_grn_init_plugin (VALUE mGrn)
128
156
  {
@@ -131,4 +159,8 @@ rb_grn_init_plugin (VALUE mGrn)
131
159
 
132
160
  rb_define_singleton_method(cGrnPlugin, "register",
133
161
  rb_grn_plugin_s_register, -1);
162
+ rb_define_singleton_method(cGrnPlugin, "system_plugins_dir",
163
+ rb_grn_plugin_s_system_plugins_dir, 0);
164
+ rb_define_singleton_method(cGrnPlugin, "suffix",
165
+ rb_grn_plugin_s_suffix, 0);
134
166
  }
@@ -0,0 +1,51 @@
1
+ /* -*- c-file-style: "ruby" -*- */
2
+ /*
3
+ Copyright (C) 2011 Haruka Yoshihara <yoshihara@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_cGrnPosting;
22
+
23
+ VALUE
24
+ rb_grn_posting_new (grn_posting *posting, grn_id term_id)
25
+ {
26
+ VALUE parameters;
27
+
28
+ parameters = rb_hash_new();
29
+
30
+ #define SET_PARAMETER(key, value) \
31
+ rb_hash_aset(parameters, ID2SYM(rb_intern((key))), INT2NUM((value)))
32
+
33
+ SET_PARAMETER("record_id", posting->rid);
34
+ SET_PARAMETER("section_id", posting->sid);
35
+ SET_PARAMETER("term_id", term_id);
36
+ SET_PARAMETER("position", posting->pos);
37
+ SET_PARAMETER("term_frequency", posting->tf);
38
+ SET_PARAMETER("weight", posting->weight);
39
+ SET_PARAMETER("n_rest_postings", posting->rest);
40
+
41
+ #undef SET_PARAMETER
42
+
43
+ return rb_funcall(rb_cGrnPosting, rb_intern("new"), 1,
44
+ parameters);
45
+ }
46
+
47
+ void
48
+ rb_grn_init_posting (VALUE mGrn)
49
+ {
50
+ rb_cGrnPosting = rb_const_get(mGrn, rb_intern("Posting"));
51
+ }
@@ -32,11 +32,16 @@ VALUE rb_cGrnTableCursor;
32
32
  grn_table_cursor *
33
33
  rb_grn_table_cursor_from_ruby_object (VALUE object, grn_ctx **context)
34
34
  {
35
+ grn_table_cursor *table_cursor;
36
+
35
37
  if (!RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cGrnTableCursor))) {
36
38
  rb_raise(rb_eTypeError, "not a groonga table cursor");
37
39
  }
38
40
 
39
- return RVAL2GRNOBJECT(object, context);
41
+ rb_grn_table_cursor_deconstruct(SELF(object), &table_cursor, NULL,
42
+ NULL, NULL,
43
+ NULL, NULL);
44
+ return table_cursor;
40
45
  }
41
46
 
42
47
  VALUE
@@ -34,7 +34,7 @@ static ID id_array_set;
34
34
  /*
35
35
  * Document-class: Groonga::Table < Groonga::Object
36
36
  *
37
- * Ruby/groongaが提供するテーブルのベースとなるクラス。このクラス
37
+ * rroongaが提供するテーブルのベースとなるクラス。このクラス
38
38
  * からGroonga::Array, Groonga::Hash, Groonga::PatriciaTrie
39
39
  * が継承されている。
40
40
  */
@@ -982,13 +982,32 @@ rb_grn_table_delete (VALUE self, VALUE rb_id)
982
982
  * テーブルに登録されているレコードを_keys_で指定されたルー
983
983
  * ルに従ってソートしたレコードの配列を返す。
984
984
  *
985
- * [
986
- * {:key => "カラム名", :order => :asc, :ascending,
987
- * :desc, :descendingのいずれか},
988
- * {:key => "カラム名", :order => :asc, :ascending,
989
- * :desc, :descendingのいずれか},
990
- * ...,
991
- * ]
985
+ * _order_には+:asc+, +:ascending+, +:desc+, +:descending+の
986
+ * いずれを指定する。
987
+ *
988
+ * [ハッシュの配列で指定する方法]
989
+ * オーソドックスな指定方法。
990
+ *
991
+ * [
992
+ * {:key => "第1ソートキー", :order => order},
993
+ * {:key => "第2ソートキー", :order => order},
994
+ * ...,
995
+ * ]
996
+ *
997
+ * [配列の配列で指定する方法]
998
+ * 少し簡単化した指定方法。
999
+ *
1000
+ * [
1001
+ * ["第1ソートキー", order],
1002
+ * ["第2ソートキー", order],
1003
+ * ...,
1004
+ * ]
1005
+ *
1006
+ * [ソートキーの配列で指定する方法]
1007
+ * _order_は常に昇順(+:ascending+)になるが、最も簡単
1008
+ * に指定できる。
1009
+ *
1010
+ * ["第1ソートキー", "第2ソートキー", ...]
992
1011
  *
993
1012
  * _options_に指定可能な値は以下の通り。
994
1013
  *
@@ -1065,14 +1084,13 @@ rb_grn_table_sort (int argc, VALUE *argv, VALUE self)
1065
1084
  "no such column: <%s>: <%s>",
1066
1085
  rb_grn_inspect(rb_key), rb_grn_inspect(self));
1067
1086
  }
1068
- if (NIL_P(rb_order)) {
1069
- keys[i].flags = 0;
1087
+ if (NIL_P(rb_order) ||
1088
+ rb_grn_equal_option(rb_order, "asc") ||
1089
+ rb_grn_equal_option(rb_order, "ascending")) {
1090
+ keys[i].flags = GRN_TABLE_SORT_ASC;
1070
1091
  } else if (rb_grn_equal_option(rb_order, "desc") ||
1071
1092
  rb_grn_equal_option(rb_order, "descending")) {
1072
1093
  keys[i].flags = GRN_TABLE_SORT_DESC;
1073
- } else if (rb_grn_equal_option(rb_order, "asc") ||
1074
- rb_grn_equal_option(rb_order, "ascending")) {
1075
- keys[i].flags = GRN_TABLE_SORT_ASC;
1076
1094
  } else {
1077
1095
  rb_raise(rb_eArgError,
1078
1096
  "order should be one of "
@@ -69,7 +69,7 @@ RB_GRN_BEGIN_DECLS
69
69
 
70
70
  #define RB_GRN_MAJOR_VERSION 1
71
71
  #define RB_GRN_MINOR_VERSION 2
72
- #define RB_GRN_MICRO_VERSION 0
72
+ #define RB_GRN_MICRO_VERSION 1
73
73
 
74
74
  #define RB_GRN_QUERY_DEFAULT_MAX_EXPRESSIONS 32
75
75
 
@@ -149,6 +149,12 @@ struct _RbGrnIndexColumn
149
149
  grn_obj *string_query;
150
150
  };
151
151
 
152
+ typedef struct _RbGrnIndexCursor RbGrnIndexCursor;
153
+ struct _RbGrnIndexCursor
154
+ {
155
+ RbGrnObject parent;
156
+ };
157
+
152
158
  typedef struct _RbGrnAccessor RbGrnAccessor;
153
159
  struct _RbGrnAccessor
154
160
  {
@@ -210,6 +216,7 @@ RB_GRN_VAR VALUE rb_cGrnColumn;
210
216
  RB_GRN_VAR VALUE rb_cGrnFixSizeColumn;
211
217
  RB_GRN_VAR VALUE rb_cGrnVariableSizeColumn;
212
218
  RB_GRN_VAR VALUE rb_cGrnIndexColumn;
219
+ RB_GRN_VAR VALUE rb_cGrnIndexCursor;
213
220
  RB_GRN_VAR VALUE rb_cGrnAccessor;
214
221
  RB_GRN_VAR VALUE rb_cGrnViewAccessor;
215
222
  RB_GRN_VAR VALUE rb_cGrnRecord;
@@ -249,6 +256,8 @@ void rb_grn_init_column (VALUE mGrn);
249
256
  void rb_grn_init_fix_size_column (VALUE mGrn);
250
257
  void rb_grn_init_variable_size_column (VALUE mGrn);
251
258
  void rb_grn_init_index_column (VALUE mGrn);
259
+ void rb_grn_init_index_cursor (VALUE mGrn);
260
+ void rb_grn_init_posting (VALUE mGrn);
252
261
  void rb_grn_init_accessor (VALUE mGrn);
253
262
  void rb_grn_init_view_accessor (VALUE mGrn);
254
263
  void rb_grn_init_record (VALUE mGrn);
@@ -282,7 +291,7 @@ grn_obj *rb_grn_context_get_backward_compatibility
282
291
  const char *rb_grn_inspect (VALUE object);
283
292
  void rb_grn_scan_options (VALUE options, ...)
284
293
  RB_GRN_GNUC_NULL_TERMINATED;
285
- grn_bool rb_grn_equal_option (VALUE option,
294
+ grn_bool rb_grn_equal_option (VALUE option,
286
295
  const char *key);
287
296
 
288
297
  VALUE rb_grn_object_alloc (VALUE klass);
@@ -458,6 +467,9 @@ void rb_grn_expression_finalizer (grn_ctx *context,
458
467
  grn_obj *grn_object,
459
468
  RbGrnExpression *rb_grn_expression);
460
469
 
470
+ VALUE rb_grn_posting_new (grn_posting *posting,
471
+ grn_id term_id);
472
+
461
473
  VALUE rb_grn_record_new (VALUE table,
462
474
  grn_id id,
463
475
  VALUE values);
@@ -513,7 +525,7 @@ VALUE rb_grn_column_expression_builder_build
513
525
  #define GRNTABLE2RVAL(context, table, owner) \
514
526
  (rb_grn_table_to_ruby_object(context, table, owner))
515
527
 
516
- #define RVAL2GRNTABLECURSOR(object) (rb_grn_table_cursor_from_ruby_object(object))
528
+ #define RVAL2GRNTABLECURSOR(object, context) (rb_grn_table_cursor_from_ruby_object(object, context))
517
529
  #define GRNTABLECURSOR2RVAL(klass, context, cursor) \
518
530
  (rb_grn_table_cursor_to_ruby_object(klass, context, cursor, GRN_TRUE))
519
531
  #define GRNTABLECURSOR2RCLASS(object) (rb_grn_table_cursor_to_ruby_class(object))
@@ -523,6 +535,9 @@ VALUE rb_grn_column_expression_builder_build
523
535
  #define GRNCOLUMN2RVAL(klass, context, column, owner) \
524
536
  (rb_grn_column_to_ruby_object(klass, context, column, owner))
525
537
 
538
+ #define GRNINDEXCURSOR2RVAL(context, cursor) \
539
+ (rb_grn_index_cursor_to_ruby_object(context, cursor, GRN_TRUE))
540
+
526
541
  #define RVAL2GRNACCESSOR(object) \
527
542
  (rb_grn_accessor_from_ruby_object(object))
528
543
  #define GRNACCESSOR2RVAL(context, accessor, owner) \
@@ -634,6 +649,9 @@ VALUE rb_grn_column_to_ruby_object (VALUE klass,
634
649
  grn_ctx *context,
635
650
  grn_obj *column,
636
651
  grn_bool owner);
652
+ VALUE rb_grn_index_cursor_to_ruby_object (grn_ctx *context,
653
+ grn_obj *cursor,
654
+ grn_bool owner);
637
655
 
638
656
  grn_query *rb_grn_query_from_ruby_object (VALUE object);
639
657
  VALUE rb_grn_query_to_ruby_object (grn_ctx *context,
@@ -101,7 +101,7 @@ rb_grn_init_version (VALUE mGrn)
101
101
  INT2NUM(RB_GRN_MICRO_VERSION));
102
102
  rb_obj_freeze(bindings_version);
103
103
  /*
104
- * Ruby/groongaのバージョン。<tt>[メジャーバージョン, マ
104
+ * rroongaのバージョン。<tt>[メジャーバージョン, マ
105
105
  * イナーバージョン, マイクロバージョン]</tt>の配列。
106
106
  */
107
107
  rb_define_const(mGrn, "BINDINGS_VERSION", bindings_version);
@@ -129,6 +129,8 @@ Init_groonga (void)
129
129
  rb_grn_init_database(mGrn);
130
130
  rb_grn_init_table(mGrn);
131
131
  rb_grn_init_table_cursor(mGrn);
132
+ rb_grn_init_index_cursor(mGrn);
133
+ rb_grn_init_posting(mGrn);
132
134
  rb_grn_init_type(mGrn);
133
135
  rb_grn_init_procedure(mGrn);
134
136
  rb_grn_init_column(mGrn);
@@ -37,6 +37,7 @@ end
37
37
  require 'groonga/view-record'
38
38
  require 'groonga/record'
39
39
  require 'groonga/expression-builder'
40
+ require 'groonga/posting'
40
41
  begin
41
42
  major, minor, micro, = RUBY_VERSION.split(/\./)
42
43
  require "#{major}.#{minor}/groonga.so"
@@ -32,9 +32,11 @@ module Groonga
32
32
  options[:context] ||= Groonga::Context.default
33
33
  options[:database] = options[:context].database
34
34
  end
35
+ options[:dump_plugins] = true if options[:dump_plugins].nil?
35
36
  options[:dump_schema] = true if options[:dump_schema].nil?
36
37
  options[:dump_tables] = true if options[:dump_tables].nil?
37
38
 
39
+ dump_plugins(options) if options[:dump_plugins]
38
40
  dump_schema(options) if options[:dump_schema]
39
41
  dump_tables(options) if options[:dump_tables]
40
42
 
@@ -46,6 +48,21 @@ module Groonga
46
48
  end
47
49
 
48
50
  private
51
+ def dump_plugins(options)
52
+ first_table = true
53
+ plugin_paths = {}
54
+ options[:database].each(:order_by => :id) do |object|
55
+ next unless object.is_a?(Groonga::Procedure)
56
+ next if object.builtin?
57
+ path = object.path
58
+ next if path.nil?
59
+ next if plugin_paths.has_key?(path)
60
+ plugin_paths[path] = true
61
+ dump_plugin(object, options)
62
+ end
63
+ options[:output].write("\n") unless plugin_paths.empty?
64
+ end
65
+
49
66
  def dump_schema(options)
50
67
  SchemaDumper.new(options.merge(:syntax => :command)).dump
51
68
  end
@@ -55,7 +72,6 @@ module Groonga
55
72
  options[:database].each(:order_by => :key) do |object|
56
73
  next unless object.is_a?(Groonga::Table)
57
74
  next if object.size.zero?
58
- next if lexicon_table?(object)
59
75
  next unless target_table?(options[:tables], object)
60
76
  options[:output].write("\n") if !first_table or options[:dump_schema]
61
77
  first_table = false
@@ -67,10 +83,14 @@ module Groonga
67
83
  TableDumper.new(table, options).dump
68
84
  end
69
85
 
70
- def lexicon_table?(table)
71
- table.support_key? and
72
- table.default_tokenizer and
73
- table.columns.any? {|column| column.index?}
86
+ def dump_plugin(plugin, options)
87
+ output = options[:output]
88
+ plugins_dir_re = Regexp.escape(Groonga::Plugin.system_plugins_dir)
89
+ suffix_re = Regexp.escape(Groonga::Plugin.suffix)
90
+ plugin_name = plugin.path.gsub!(/(?:\A#{plugins_dir_re}\/|
91
+ #{suffix_re}\z)/x,
92
+ '')
93
+ output.write("register #{plugin_name}\n")
74
94
  end
75
95
 
76
96
  def target_table?(target_tables, table)