rroonga 0.9.4-x86-mingw32 → 0.9.5-x86-mingw32

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 (153) hide show
  1. data/NEWS.ja.rdoc +29 -0
  2. data/NEWS.rdoc +29 -0
  3. data/Rakefile +6 -6
  4. data/ext/groonga/rb-grn-array.c +1 -1
  5. data/ext/groonga/rb-grn-context.c +15 -28
  6. data/ext/groonga/rb-grn-exception.c +46 -1
  7. data/ext/groonga/rb-grn-expression.c +22 -13
  8. data/ext/groonga/rb-grn-fix-size-column.c +2 -8
  9. data/ext/groonga/rb-grn-hash.c +8 -1
  10. data/ext/groonga/rb-grn-object.c +1 -1
  11. data/ext/groonga/rb-grn-patricia-trie.c +23 -1
  12. data/ext/groonga/rb-grn-table-key-support.c +22 -0
  13. data/ext/groonga/rb-grn-table.c +37 -5
  14. data/ext/groonga/rb-grn-utils.c +20 -2
  15. data/ext/groonga/rb-grn.h +1 -1
  16. data/ext/groonga/rb-groonga.c +76 -38
  17. data/extconf.rb +17 -1
  18. data/html/developer.html +32 -7
  19. data/html/footer.html.erb +5 -0
  20. data/html/heading-mark.svg +393 -0
  21. data/html/index.html +33 -3
  22. data/lib/1.8/groonga.so +0 -0
  23. data/lib/1.9/groonga.so +0 -0
  24. data/lib/groonga.rb +3 -7
  25. data/lib/groonga/context.rb +2 -13
  26. data/lib/groonga/expression-builder.rb +273 -67
  27. data/lib/groonga/pagination.rb +143 -0
  28. data/lib/groonga/record.rb +2 -0
  29. data/lib/groonga/schema.rb +140 -29
  30. data/pkg/rroonga-0.9.5/NEWS.ja.rdoc +156 -0
  31. data/pkg/rroonga-0.9.5/NEWS.rdoc +158 -0
  32. data/pkg/rroonga-0.9.5/README.ja.rdoc +65 -0
  33. data/pkg/rroonga-0.9.5/README.rdoc +66 -0
  34. data/pkg/rroonga-0.9.5/text/TUTORIAL.ja.rdoc +394 -0
  35. data/pkg/rroonga-0.9.5/text/expression.rdoc +285 -0
  36. data/rroonga-build.rb +2 -2
  37. data/test-unit/Rakefile +40 -0
  38. data/test-unit/TODO +5 -0
  39. data/test-unit/bin/testrb +5 -0
  40. data/test-unit/html/classic.html +15 -0
  41. data/test-unit/html/index.html +25 -0
  42. data/test-unit/html/index.html.ja +27 -0
  43. data/test-unit/lib/test/unit.rb +323 -0
  44. data/test-unit/lib/test/unit/assertionfailederror.rb +25 -0
  45. data/test-unit/lib/test/unit/assertions.rb +1230 -0
  46. data/test-unit/lib/test/unit/attribute.rb +125 -0
  47. data/test-unit/lib/test/unit/autorunner.rb +360 -0
  48. data/test-unit/lib/test/unit/collector.rb +36 -0
  49. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  50. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  51. data/test-unit/lib/test/unit/collector/load.rb +144 -0
  52. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  53. data/test-unit/lib/test/unit/color-scheme.rb +102 -0
  54. data/test-unit/lib/test/unit/color.rb +96 -0
  55. data/test-unit/lib/test/unit/diff.rb +724 -0
  56. data/test-unit/lib/test/unit/error.rb +130 -0
  57. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  58. data/test-unit/lib/test/unit/failure.rb +136 -0
  59. data/test-unit/lib/test/unit/fixture.rb +176 -0
  60. data/test-unit/lib/test/unit/notification.rb +129 -0
  61. data/test-unit/lib/test/unit/omission.rb +191 -0
  62. data/test-unit/lib/test/unit/pending.rb +150 -0
  63. data/test-unit/lib/test/unit/priority.rb +180 -0
  64. data/test-unit/lib/test/unit/runner/console.rb +52 -0
  65. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  66. data/test-unit/lib/test/unit/runner/tap.rb +8 -0
  67. data/test-unit/lib/test/unit/testcase.rb +476 -0
  68. data/test-unit/lib/test/unit/testresult.rb +89 -0
  69. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  70. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  71. data/test-unit/lib/test/unit/ui/console/testrunner.rb +466 -0
  72. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +63 -0
  73. data/test-unit/lib/test/unit/ui/tap/testrunner.rb +92 -0
  74. data/test-unit/lib/test/unit/ui/testrunner.rb +28 -0
  75. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  76. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  77. data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
  78. data/test-unit/lib/test/unit/util/method-owner-finder.rb +28 -0
  79. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  80. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  81. data/test-unit/lib/test/unit/version.rb +7 -0
  82. data/test-unit/sample/adder.rb +13 -0
  83. data/test-unit/sample/subtracter.rb +12 -0
  84. data/test-unit/sample/test_adder.rb +20 -0
  85. data/test-unit/sample/test_subtracter.rb +20 -0
  86. data/test-unit/sample/test_user.rb +23 -0
  87. data/test-unit/test/collector/test-descendant.rb +133 -0
  88. data/test-unit/test/collector/test-load.rb +442 -0
  89. data/test-unit/test/collector/test_dir.rb +406 -0
  90. data/test-unit/test/collector/test_objectspace.rb +100 -0
  91. data/test-unit/test/run-test.rb +15 -0
  92. data/test-unit/test/test-attribute.rb +86 -0
  93. data/test-unit/test/test-color-scheme.rb +67 -0
  94. data/test-unit/test/test-color.rb +47 -0
  95. data/test-unit/test/test-diff.rb +518 -0
  96. data/test-unit/test/test-emacs-runner.rb +60 -0
  97. data/test-unit/test/test-fixture.rb +287 -0
  98. data/test-unit/test/test-notification.rb +33 -0
  99. data/test-unit/test/test-omission.rb +81 -0
  100. data/test-unit/test/test-pending.rb +70 -0
  101. data/test-unit/test/test-priority.rb +119 -0
  102. data/test-unit/test/test-testcase.rb +544 -0
  103. data/test-unit/test/test_assertions.rb +1151 -0
  104. data/test-unit/test/test_error.rb +26 -0
  105. data/test-unit/test/test_failure.rb +33 -0
  106. data/test-unit/test/test_testresult.rb +113 -0
  107. data/test-unit/test/test_testsuite.rb +129 -0
  108. data/test-unit/test/testunit-test-util.rb +14 -0
  109. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  110. data/test-unit/test/util/test-method-owner-finder.rb +38 -0
  111. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  112. data/test-unit/test/util/test_observable.rb +102 -0
  113. data/test-unit/test/util/test_procwrapper.rb +36 -0
  114. data/test/groonga-test-utils.rb +3 -2
  115. data/test/run-test.rb +14 -2
  116. data/test/test-column.rb +7 -7
  117. data/test/test-context-select.rb +34 -11
  118. data/test/test-exception.rb +3 -0
  119. data/test/test-expression-builder.rb +11 -0
  120. data/test/test-expression.rb +3 -6
  121. data/test/test-gqtp.rb +3 -5
  122. data/test/test-pagination.rb +249 -0
  123. data/test/test-record.rb +36 -8
  124. data/test/test-remote.rb +11 -4
  125. data/test/test-schema-create-table.rb +251 -0
  126. data/test/test-schema.rb +4 -24
  127. data/test/test-table-offset-and-limit.rb +3 -5
  128. data/test/test-table-select-mecab.rb +80 -0
  129. data/test/test-table-select-weight.rb +104 -0
  130. data/test/test-table.rb +22 -4
  131. data/test/test-version.rb +1 -1
  132. data/text/TUTORIAL.ja.rdoc +2 -0
  133. data/text/expression.rdoc +1 -0
  134. data/vendor/local/bin/grntest.exe +0 -0
  135. data/vendor/local/bin/groonga.exe +0 -0
  136. data/vendor/local/bin/libgroonga-0.dll +0 -0
  137. data/vendor/local/include/{groonga.h → groonga/groonga.h} +93 -32
  138. data/vendor/local/lib/groonga/modules/functions/cast.dll +0 -0
  139. data/vendor/local/lib/groonga/modules/functions/cast.la +41 -0
  140. data/vendor/local/lib/pkgconfig/groonga.pc +12 -0
  141. data/vendor/local/share/groonga/admin_html/css/admin.css +104 -0
  142. data/vendor/local/share/groonga/admin_html/css/ui-lightness/jquery-ui-1.8.1.custom.css +486 -0
  143. data/vendor/local/share/groonga/admin_html/index.html +1355 -0
  144. data/vendor/local/share/groonga/admin_html/js/jquery-1.4.2.min.js +154 -0
  145. data/vendor/local/share/groonga/admin_html/js/jquery-ui-1.8.1.custom.min.js +756 -0
  146. data/vendor/local/share/groonga/munin/plugins/groonga_cpu_load +47 -0
  147. data/vendor/local/share/groonga/munin/plugins/groonga_cpu_time +57 -0
  148. data/vendor/local/share/groonga/munin/plugins/groonga_disk +162 -0
  149. data/vendor/local/share/groonga/munin/plugins/groonga_memory +51 -0
  150. data/vendor/local/share/groonga/munin/plugins/groonga_n_records +110 -0
  151. data/vendor/local/share/groonga/munin/plugins/groonga_query_performance +133 -0
  152. data/vendor/local/share/groonga/munin/plugins/groonga_status +84 -0
  153. metadata +126 -36
data/NEWS.ja.rdoc CHANGED
@@ -1,5 +1,34 @@
1
1
  = お知らせ
2
2
 
3
+ == 0.9.5: 2010-07-29
4
+
5
+ * groonga 0.7.4対応。
6
+ * Groonga::Table#selectの改良:
7
+ * 重み付きマッチ対応:
8
+
9
+ sourceカラムとtitleカラムにマッチするが、
10
+ titleカラムの方がスコアが大きくなる例:
11
+ table.select do |record|
12
+ (record.title * 10 | record.source) =~ "query"
13
+ end
14
+ * 配列で複数条件のand表現に対応:
15
+
16
+ 以下は同じ条件になる:
17
+ table.select do |record|
18
+ conditions = []
19
+ conditions << record.title =~ "query"
20
+ conditions << record.updated_at > Time.parse("2010-07-29T21:14:29+09:00")
21
+ conditions
22
+ end
23
+
24
+ table.select do |record|
25
+ (record.title =~ "query") &
26
+ (record.updated_at > Time.parse("2010-07-29T21:14:29+09:00"))
27
+ end
28
+ * 利用しているgroongaのバージョン取得対応: Groonga::VERSION
29
+ * Groonga::Table#support_sub_records?追加
30
+ * ページネーション対応: Groonga::Table#paginate, Groonga::Pagination
31
+
3
32
  == 0.9.4: 2010-04-22
4
33
 
5
34
  * リリースミス修正。
data/NEWS.rdoc CHANGED
@@ -1,5 +1,34 @@
1
1
  = NEWS
2
2
 
3
+ == 0.9.5: 2010-07-20
4
+
5
+ * Supported groonga 0.7.4.
6
+ * Imporoved Groonga::Table#select:
7
+ * Supported weight match:
8
+
9
+ Here is an example to match source column or title column and
10
+ title column has high score:
11
+ table.select do |record|
12
+ (record.title * 10 | record.source) =~ "query"
13
+ end
14
+ * Supported and representation for and conditions:
15
+
16
+ Here are examples that represents the same condition:
17
+ table.select do |record|
18
+ conditions = []
19
+ conditions << record.title =~ "query"
20
+ conditions << record.updated_at > Time.parse("2010-07-29T21:14:29+09:00")
21
+ conditions
22
+ end
23
+
24
+ table.select do |record|
25
+ (record.title =~ "query") &
26
+ (record.updated_at > Time.parse("2010-07-29T21:14:29+09:00"))
27
+ end
28
+ * Provided groonga runtime version: Groonga::VERSION
29
+ * Added Groonga::Table#support_sub_records?
30
+ * Supported pagination: Groonga::Table#paginate, Groonga::Pagination
31
+
3
32
  == 0.9.4: 2010-04-22
4
33
 
5
34
  * Fixed release miss.
data/Rakefile CHANGED
@@ -87,10 +87,10 @@ end
87
87
  ENV["VERSION"] ||= guess_version
88
88
  version = ENV["VERSION"]
89
89
  project = nil
90
- Hoe.spec('rroonga') do |_project|
90
+ Hoe.spec('rroonga') do
91
91
  Hoe::Test::SUPPORTED_TEST_FRAMEWORKS[:testunit2] = "test/run-test.rb"
92
- project = _project
93
- project.version = version
92
+ project = self
93
+ project.version = version.dup
94
94
  project.rubyforge_name = 'groonga'
95
95
  authors = File.join(base_dir, "AUTHORS")
96
96
  project.author = File.readlines(authors).collect do |line|
@@ -187,6 +187,7 @@ task :prepare_docs_for_publishing do
187
187
  end
188
188
  end
189
189
 
190
+ desc "Publish HTML to Web site."
190
191
  task :publish_html do
191
192
  config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
192
193
  host = "#{config["username"]}@rubyforge.org"
@@ -196,10 +197,9 @@ task :publish_html do
196
197
  sh "rsync #{rsync_args} html/ #{host}:#{remote_dir}"
197
198
  end
198
199
 
200
+ desc "Tag the current revision."
199
201
  task :tag do
200
- repository = "svn+ssh://rubyforge.org/var/svn/groonga/rroonga"
201
- sh("svn cp -m 'release #{version}!!!' " +
202
- "#{repository}/trunk #{repository}/tags/#{version}")
202
+ sh("git tag -a #{version} -m 'release #{version}!!!'")
203
203
  end
204
204
 
205
205
  # fix Hoe's incorrect guess.
@@ -83,7 +83,7 @@ VALUE rb_cGrnArray;
83
83
  *
84
84
  * 名前付き永続テーブルを生成する。ただし、ファイル名は気に
85
85
  * しない。
86
- * Groonga::Array.create(:name => "<bookmarks>",
86
+ * Groonga::Array.create(:name => "Bookmarks",
87
87
  * :persistent => true)
88
88
  *
89
89
  * それぞれのレコードに512バイトの値を格納できる無名一時テー
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby" -*- */
2
2
  /*
3
- Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2010 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
@@ -107,19 +107,23 @@ rb_grn_context_to_exception (grn_ctx *context, VALUE related_object)
107
107
 
108
108
  GRN_OBJ_INIT(&bulk, GRN_BULK, 0, GRN_ID_NIL);
109
109
  GRN_TEXT_PUTS(context, &bulk, message);
110
- GRN_TEXT_PUTS(context, &bulk, ": ");
111
- GRN_TEXT_PUTS(context, &bulk, context->errbuf);
110
+ if (context->errbuf[0]) {
111
+ GRN_TEXT_PUTS(context, &bulk, ": ");
112
+ GRN_TEXT_PUTS(context, &bulk, context->errbuf);
113
+ }
112
114
  if (!NIL_P(related_object)) {
113
115
  GRN_TEXT_PUTS(context, &bulk, ": ");
114
116
  GRN_TEXT_PUTS(context, &bulk, rb_grn_inspect(related_object));
115
117
  }
116
- GRN_TEXT_PUTS(context, &bulk, "\n");
117
- GRN_TEXT_PUTS(context, &bulk, context->errfile);
118
- GRN_TEXT_PUTS(context, &bulk, ":");
119
- grn_text_itoa(context, &bulk, context->errline);
120
- GRN_TEXT_PUTS(context, &bulk, ": ");
121
- GRN_TEXT_PUTS(context, &bulk, context->errfunc);
122
- GRN_TEXT_PUTS(context, &bulk, "()");
118
+ if (context->errline > 0) {
119
+ GRN_TEXT_PUTS(context, &bulk, "\n");
120
+ GRN_TEXT_PUTS(context, &bulk, context->errfile);
121
+ GRN_TEXT_PUTS(context, &bulk, ":");
122
+ grn_text_itoa(context, &bulk, context->errline);
123
+ GRN_TEXT_PUTS(context, &bulk, ": ");
124
+ GRN_TEXT_PUTS(context, &bulk, context->errfunc);
125
+ GRN_TEXT_PUTS(context, &bulk, "()");
126
+ }
123
127
  exception = rb_funcall(exception_class, rb_intern("new"), 1,
124
128
  rb_str_new(GRN_BULK_HEAD(&bulk),
125
129
  GRN_BULK_VSIZE(&bulk)));
@@ -410,7 +414,7 @@ static VALUE
410
414
  rb_grn_context_connect (int argc, VALUE *argv, VALUE self)
411
415
  {
412
416
  grn_ctx *context;
413
- char *host;
417
+ const char *host;
414
418
  int port;
415
419
  int flags = 0;
416
420
  grn_rc rc;
@@ -610,21 +614,6 @@ rb_grn_context_array_reference (VALUE self, VALUE name_or_id)
610
614
  return GRNOBJECT2RVAL(Qnil, context, object, RB_GRN_FALSE);
611
615
  }
612
616
 
613
- /*
614
- * call-seq:
615
- * context.pop -> 値
616
- *
617
- * コンテキスト内にあるスタックから値を取り出す。このスタッ
618
- * クにはGroonga::Expression#executeの実行結果が格納される。
619
- */
620
- static VALUE
621
- rb_grn_context_pop (VALUE self)
622
- {
623
- grn_ctx *context;
624
- context = SELF(self);
625
- return GRNOBJ2RVAL(Qnil, context, grn_ctx_pop(context), self);
626
- }
627
-
628
617
  void
629
618
  rb_grn_init_context (VALUE mGrn)
630
619
  {
@@ -654,8 +643,6 @@ rb_grn_init_context (VALUE mGrn)
654
643
 
655
644
  rb_define_method(cGrnContext, "[]", rb_grn_context_array_reference, 1);
656
645
 
657
- rb_define_method(cGrnContext, "pop", rb_grn_context_pop, 0);
658
-
659
646
  rb_define_method(cGrnContext, "connect", rb_grn_context_connect, -1);
660
647
  rb_define_method(cGrnContext, "send", rb_grn_context_send, 1);
661
648
  rb_define_method(cGrnContext, "receive", rb_grn_context_receive, 0);
@@ -89,6 +89,9 @@ static VALUE eGrnSyntaxError;
89
89
  static VALUE eGrnRetryMax;
90
90
  static VALUE eGrnIncompatibleFileFormat;
91
91
  static VALUE eGrnUpdateNotAllowed;
92
+ static VALUE eGrnTooSmallOffset;
93
+ static VALUE eGrnTooLargeOffset;
94
+ static VALUE eGrnTooSmallLimit;
92
95
 
93
96
  VALUE
94
97
  rb_grn_rc_to_exception (grn_rc rc)
@@ -300,6 +303,15 @@ rb_grn_rc_to_exception (grn_rc rc)
300
303
  case GRN_UPDATE_NOT_ALLOWED:
301
304
  exception = eGrnUpdateNotAllowed;
302
305
  break;
306
+ case GRN_TOO_SMALL_OFFSET:
307
+ exception = eGrnTooSmallOffset;
308
+ break;
309
+ case GRN_TOO_LARGE_OFFSET:
310
+ exception = eGrnTooLargeOffset;
311
+ break;
312
+ case GRN_TOO_SMALL_LIMIT:
313
+ exception = eGrnTooSmallLimit;
314
+ break;
303
315
  }
304
316
 
305
317
  if (NIL_P(exception))
@@ -518,6 +530,15 @@ rb_grn_rc_to_message (grn_rc rc)
518
530
  case GRN_UPDATE_NOT_ALLOWED:
519
531
  message = "update isn't allowed";
520
532
  break;
533
+ case GRN_TOO_SMALL_OFFSET:
534
+ message = "too small offset";
535
+ break;
536
+ case GRN_TOO_LARGE_OFFSET:
537
+ message = "too large offset";
538
+ break;
539
+ case GRN_TOO_SMALL_LIMIT:
540
+ message = "too small limit";
541
+ break;
521
542
  }
522
543
 
523
544
  if (!message)
@@ -549,7 +570,7 @@ rb_grn_init_exception (VALUE mGrn)
549
570
  /*
550
571
  * Document-class: Groonga::Error
551
572
  *
552
- * Ruby/groongaが発生する例外のスーパークラス。
573
+ * rroongaが発生する例外のスーパークラス。
553
574
  */
554
575
  rb_eGrnError =
555
576
  rb_define_class_under(mGrn, "Error", rb_eStandardError);
@@ -1107,4 +1128,28 @@ rb_grn_init_exception (VALUE mGrn)
1107
1128
  */
1108
1129
  eGrnUpdateNotAllowed =
1109
1130
  rb_define_class_under(mGrn, "UpdateNotAllowed", rb_eGrnError);
1131
+
1132
+ /*
1133
+ * Document-class: Groonga::TooSmallOffset
1134
+ *
1135
+ * offset値が小さすぎるときに発生する。
1136
+ */
1137
+ eGrnTooSmallOffset =
1138
+ rb_define_class_under(mGrn, "TooSmallOffset", rb_eGrnError);
1139
+
1140
+ /*
1141
+ * Document-class: Groonga::TooLargeOffset
1142
+ *
1143
+ * offset値が大きすぎるときに発生する。
1144
+ */
1145
+ eGrnTooLargeOffset =
1146
+ rb_define_class_under(mGrn, "TooLargeOffset", rb_eGrnError);
1147
+
1148
+ /*
1149
+ * Document-class: Groonga::TooSmallLimit
1150
+ *
1151
+ * limit値が小さすぎるときに発生する。
1152
+ */
1153
+ eGrnTooSmallLimit =
1154
+ rb_define_class_under(mGrn, "TooSmallLimit", rb_eGrnError);
1110
1155
  }
@@ -333,7 +333,8 @@ static VALUE
333
333
  rb_grn_expression_parse (int argc, VALUE *argv, VALUE self)
334
334
  {
335
335
  grn_ctx *context = NULL;
336
- grn_obj *expression, *default_column = NULL;
336
+ grn_obj *expression, *default_column;
337
+ rb_grn_boolean default_column_is_created = RB_GRN_FALSE;
337
338
  grn_operator default_operator = GRN_OP_AND;
338
339
  grn_operator default_mode = GRN_OP_MATCH;
339
340
  grn_rc rc;
@@ -363,7 +364,15 @@ rb_grn_expression_parse (int argc, VALUE *argv, VALUE self)
363
364
  NULL, NULL,
364
365
  NULL, NULL, NULL);
365
366
 
366
- default_column = RVAL2GRNBULK(rb_default_column, context, default_column);
367
+ if (NIL_P(rb_default_column)) {
368
+ default_column = NULL;
369
+ } else if (RVAL2CBOOL(rb_obj_is_kind_of(rb_default_column, rb_cGrnObject))) {
370
+ default_column = RVAL2GRNOBJECT(rb_default_column, &context);
371
+ } else {
372
+ default_column = RVAL2GRNBULK(rb_default_column, context, NULL);
373
+ default_column_is_created = RB_GRN_TRUE;
374
+ }
375
+
367
376
  if (!NIL_P(rb_default_mode))
368
377
  default_mode = RVAL2GRNOPERATOR(rb_default_mode);
369
378
  if (!NIL_P(rb_default_operator))
@@ -382,10 +391,10 @@ rb_grn_expression_parse (int argc, VALUE *argv, VALUE self)
382
391
  }
383
392
 
384
393
  if (NIL_P(rb_allow_pragma)) {
385
- if ((flags & GRN_EXPR_SYNTAX_QUERY) == GRN_EXPR_SYNTAX_QUERY)
394
+ if (!(flags & GRN_EXPR_SYNTAX_SCRIPT))
386
395
  flags |= GRN_EXPR_ALLOW_PRAGMA;
387
396
  } else {
388
- if ((flags & GRN_EXPR_SYNTAX_SCRIPT) == GRN_EXPR_SYNTAX_SCRIPT)
397
+ if ((flags & GRN_EXPR_SYNTAX_SCRIPT))
389
398
  rb_raise(rb_eArgError,
390
399
  ":allow_pragma isn't allowed in script syntax");
391
400
  if (RVAL2CBOOL(rb_allow_pragma))
@@ -393,10 +402,10 @@ rb_grn_expression_parse (int argc, VALUE *argv, VALUE self)
393
402
  }
394
403
 
395
404
  if (NIL_P(rb_allow_column)) {
396
- if ((flags & GRN_EXPR_SYNTAX_QUERY) == GRN_EXPR_SYNTAX_QUERY)
405
+ if (!(flags & GRN_EXPR_SYNTAX_SCRIPT))
397
406
  flags |= GRN_EXPR_ALLOW_COLUMN;
398
407
  } else {
399
- if ((flags & GRN_EXPR_SYNTAX_SCRIPT) == GRN_EXPR_SYNTAX_SCRIPT)
408
+ if ((flags & GRN_EXPR_SYNTAX_SCRIPT))
400
409
  rb_raise(rb_eArgError,
401
410
  ":allow_column isn't allowed in script syntax");
402
411
  if (RVAL2CBOOL(rb_allow_column))
@@ -419,7 +428,8 @@ rb_grn_expression_parse (int argc, VALUE *argv, VALUE self)
419
428
  related_object = rb_ary_new3(2, self, rb_ary_new4(argc, argv));
420
429
  exception = rb_grn_context_to_exception(context, related_object);
421
430
  }
422
- grn_obj_unlink(context, default_column);
431
+ if (default_column_is_created)
432
+ grn_obj_unlink(context, default_column);
423
433
 
424
434
  if (!NIL_P(exception))
425
435
  rb_exc_raise(exception);
@@ -429,26 +439,25 @@ rb_grn_expression_parse (int argc, VALUE *argv, VALUE self)
429
439
 
430
440
  /*
431
441
  * call-seq:
432
- * expression.execute
442
+ * expression.execute -> 値
433
443
  *
434
- * _expression_を実行する。
444
+ * _expression_を実行し、実行した結果を返す。
435
445
  */
436
446
  static VALUE
437
447
  rb_grn_expression_execute (VALUE self)
438
448
  {
439
449
  grn_ctx *context = NULL;
440
450
  grn_obj *expression;
441
- grn_rc rc;
451
+ grn_obj *result;
442
452
 
443
453
  rb_grn_expression_deconstruct(SELF(self), &expression, &context,
444
454
  NULL, NULL,
445
455
  NULL, NULL, NULL);
446
456
 
447
- rc = grn_expr_exec(context, expression, 0);
457
+ result = grn_expr_exec(context, expression, 0);
448
458
  rb_grn_context_check(context, self);
449
- rb_grn_rc_check(rc, self);
450
459
 
451
- return Qnil;
460
+ return GRNOBJ2RVAL(Qnil, context, result, self);
452
461
  }
453
462
 
454
463
  /*
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby" -*- */
2
2
  /*
3
- Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2009-2010 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
@@ -77,13 +77,7 @@ rb_grn_fix_size_column_array_set (VALUE self, VALUE rb_id, VALUE rb_value)
77
77
  &value, &range_id, &range);
78
78
 
79
79
  id = NUM2UINT(rb_id);
80
- RVAL2GRNBULK(rb_value, context, value);
81
- if ((value->header.domain == GRN_DB_INT32 ||
82
- value->header.domain == GRN_DB_UINT32) &&
83
- (GRN_TABLE_HASH_KEY <= range->header.type &&
84
- range->header.type <= GRN_TABLE_VIEW)) {
85
- value->header.domain = range_id;
86
- }
80
+ RVAL2GRNBULK_WITH_TYPE(rb_value, context, value, range_id, range);
87
81
 
88
82
  rc = grn_obj_set_value(context, column, id, value, GRN_OBJ_SET);
89
83
  rb_grn_context_check(context, self);
@@ -62,6 +62,9 @@ VALUE rb_cGrnHash;
62
62
  * Groonga::Contextに結びついているデータベースが一時デー
63
63
  * タベースの場合は例外が発生する。
64
64
  *
65
+ * [+:key_normalize+]
66
+ * +true+を指定するとキーを正規化する。
67
+ *
65
68
  * [+:key_type+]
66
69
  * キーの種類を示すオブジェクトを指定する。キーの種類には型
67
70
  * 名("Int32"や"ShortText"など)またはGroonga::Typeまたは
@@ -152,7 +155,7 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass)
152
155
  grn_obj_flags flags = GRN_TABLE_HASH_KEY;
153
156
  VALUE rb_table;
154
157
  VALUE options, rb_context, rb_name, rb_path, rb_persistent;
155
- VALUE rb_key_type, rb_value_type, rb_default_tokenizer;
158
+ VALUE rb_key_normalize, rb_key_type, rb_value_type, rb_default_tokenizer;
156
159
  VALUE rb_sub_records;
157
160
 
158
161
  rb_scan_args(argc, argv, "01", &options);
@@ -162,6 +165,7 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass)
162
165
  "name", &rb_name,
163
166
  "path", &rb_path,
164
167
  "persistent", &rb_persistent,
168
+ "key_normalize", &rb_key_normalize,
165
169
  "key_type", &rb_key_type,
166
170
  "value_type", &rb_value_type,
167
171
  "default_tokenizer", &rb_default_tokenizer,
@@ -184,6 +188,9 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass)
184
188
  if (RVAL2CBOOL(rb_persistent))
185
189
  flags |= GRN_OBJ_PERSISTENT;
186
190
 
191
+ if (RVAL2CBOOL(rb_key_normalize))
192
+ flags |= GRN_OBJ_KEY_NORMALIZE;
193
+
187
194
  if (NIL_P(rb_key_type)) {
188
195
  flags |= GRN_OBJ_KEY_VAR_SIZE;
189
196
  } else {
@@ -429,7 +429,7 @@ rb_grn_named_object_set_name (RbGrnNamedObject *rb_grn_named_object,
429
429
  const char *name, unsigned name_size)
430
430
  {
431
431
  if (rb_grn_named_object->name) {
432
- free(rb_grn_named_object->name);
432
+ xfree(rb_grn_named_object->name);
433
433
  rb_grn_named_object->name = NULL;
434
434
  }
435
435
  if (name_size > 0) {
@@ -396,7 +396,7 @@ rb_grn_patricia_trie_scan (VALUE self, VALUE rb_string)
396
396
  while (string_length > 0) {
397
397
  const char *rest;
398
398
  int i, n_hits;
399
- long previous_offset = 0;
399
+ unsigned int previous_offset = 0;
400
400
 
401
401
  n_hits = grn_pat_scan(context, (grn_pat *)table,
402
402
  string, string_length,
@@ -469,6 +469,25 @@ rb_grn_patricia_trie_prefix_search (VALUE self, VALUE rb_prefix)
469
469
  return rb_result;
470
470
  }
471
471
 
472
+ /*
473
+ * call-seq:
474
+ * table.register_key_with_sis? -> true/false
475
+ *
476
+ * キーを登録するときに文字列の全suffixも一緒に登録する場合
477
+ * は+true+、登録しない場合は+false+を返す。
478
+ */
479
+ static VALUE
480
+ rb_grn_patricia_trie_register_key_with_sis_p (VALUE self)
481
+ {
482
+ grn_obj *table;
483
+
484
+ rb_grn_table_key_support_deconstruct(SELF(self), &table, NULL,
485
+ NULL, NULL, NULL,
486
+ NULL, NULL, NULL,
487
+ NULL);
488
+ return CBOOL2RVAL(table->header.flags & GRN_OBJ_KEY_WITH_SIS);
489
+ }
490
+
472
491
  void
473
492
  rb_grn_init_patricia_trie (VALUE mGrn)
474
493
  {
@@ -485,4 +504,7 @@ rb_grn_init_patricia_trie (VALUE mGrn)
485
504
  rb_grn_patricia_trie_scan, 1);
486
505
  rb_define_method(rb_cGrnPatriciaTrie, "prefix_search",
487
506
  rb_grn_patricia_trie_prefix_search, 1);
507
+
508
+ rb_define_method(rb_cGrnPatriciaTrie, "register_key_with_sis?",
509
+ rb_grn_patricia_trie_register_key_with_sis_p, 0);
488
510
  }