rroonga 2.0.4 → 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. data/Rakefile +21 -2
  2. data/bin/grndump +3 -2
  3. data/ext/groonga/extconf.rb +1 -6
  4. data/ext/groonga/rb-grn-array.c +58 -31
  5. data/ext/groonga/rb-grn-column.c +220 -148
  6. data/ext/groonga/rb-grn-context.c +46 -32
  7. data/ext/groonga/rb-grn-database.c +102 -90
  8. data/ext/groonga/rb-grn-double-array-trie.c +205 -163
  9. data/ext/groonga/rb-grn-encoding-support.c +2 -3
  10. data/ext/groonga/rb-grn-encoding.c +13 -8
  11. data/ext/groonga/rb-grn-exception.c +1 -1
  12. data/ext/groonga/rb-grn-expression.c +110 -133
  13. data/ext/groonga/rb-grn-fix-size-column.c +5 -4
  14. data/ext/groonga/rb-grn-geo-point.c +55 -0
  15. data/ext/groonga/rb-grn-hash.c +120 -82
  16. data/ext/groonga/rb-grn-index-column.c +66 -70
  17. data/ext/groonga/rb-grn-index-cursor.c +3 -0
  18. data/ext/groonga/rb-grn-logger.c +33 -51
  19. data/ext/groonga/rb-grn-object.c +2 -0
  20. data/ext/groonga/rb-grn-operator.c +1 -1
  21. data/ext/groonga/rb-grn-patricia-trie.c +287 -232
  22. data/ext/groonga/rb-grn-plugin.c +11 -14
  23. data/ext/groonga/rb-grn-snippet.c +37 -54
  24. data/ext/groonga/rb-grn-table-cursor-key-support.c +3 -3
  25. data/ext/groonga/rb-grn-table-cursor.c +8 -6
  26. data/ext/groonga/rb-grn-table-key-support.c +22 -29
  27. data/ext/groonga/rb-grn-table.c +355 -279
  28. data/ext/groonga/rb-grn-type.c +18 -25
  29. data/ext/groonga/rb-grn-utils.c +77 -7
  30. data/ext/groonga/rb-grn-variable-size-column.c +12 -20
  31. data/ext/groonga/rb-grn-view.c +56 -51
  32. data/ext/groonga/rb-grn.h +28 -1
  33. data/ext/groonga/rb-groonga.c +1 -0
  34. data/lib/groonga.rb +2 -0
  35. data/lib/groonga/command.rb +3 -1
  36. data/lib/groonga/database.rb +27 -0
  37. data/lib/groonga/dumper.rb +96 -17
  38. data/lib/groonga/geo-point.rb +216 -0
  39. data/lib/groonga/schema.rb +29 -46
  40. data/rroonga-build.rb +1 -1
  41. data/rroonga.gemspec +90 -0
  42. data/test/groonga-test-utils.rb +168 -0
  43. data/test/run-test.rb +60 -0
  44. data/test/test-accessor.rb +36 -0
  45. data/test/test-array.rb +146 -0
  46. data/test/test-column.rb +350 -0
  47. data/test/test-command-select.rb +181 -0
  48. data/test/test-context.rb +130 -0
  49. data/test/test-database-dumper.rb +259 -0
  50. data/test/test-database.rb +173 -0
  51. data/test/test-double-array-trie.rb +189 -0
  52. data/test/test-encoding.rb +33 -0
  53. data/test/test-exception.rb +230 -0
  54. data/test/test-expression-builder.rb +602 -0
  55. data/test/test-expression.rb +134 -0
  56. data/test/test-fix-size-column.rb +77 -0
  57. data/test/test-geo-point.rb +190 -0
  58. data/test/test-gqtp.rb +70 -0
  59. data/test/test-hash.rb +367 -0
  60. data/test/test-index-column.rb +180 -0
  61. data/test/test-index-cursor.rb +123 -0
  62. data/test/test-logger.rb +37 -0
  63. data/test/test-pagination.rb +249 -0
  64. data/test/test-patricia-trie.rb +440 -0
  65. data/test/test-plugin.rb +35 -0
  66. data/test/test-procedure.rb +37 -0
  67. data/test/test-query-log.rb +258 -0
  68. data/test/test-record.rb +577 -0
  69. data/test/test-remote.rb +63 -0
  70. data/test/test-schema-create-table.rb +267 -0
  71. data/test/test-schema-dumper.rb +235 -0
  72. data/test/test-schema-type.rb +208 -0
  73. data/test/test-schema-view.rb +90 -0
  74. data/test/test-schema.rb +886 -0
  75. data/test/test-snippet.rb +130 -0
  76. data/test/test-table-dumper.rb +353 -0
  77. data/test/test-table-offset-and-limit.rb +100 -0
  78. data/test/test-table-select-mecab.rb +80 -0
  79. data/test/test-table-select-normalize.rb +57 -0
  80. data/test/test-table-select-weight.rb +123 -0
  81. data/test/test-table-select.rb +191 -0
  82. data/test/test-table-traverse.rb +304 -0
  83. data/test/test-table.rb +711 -0
  84. data/test/test-type.rb +79 -0
  85. data/test/test-variable-size-column.rb +147 -0
  86. data/test/test-variable.rb +28 -0
  87. data/test/test-vector-column.rb +76 -0
  88. data/test/test-version.rb +61 -0
  89. data/test/test-view.rb +72 -0
  90. metadata +330 -202
data/test/test-hash.rb ADDED
@@ -0,0 +1,367 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2009-2012 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
+ class HashTest < Test::Unit::TestCase
19
+ include GroongaTestUtils
20
+
21
+ setup :setup_database
22
+
23
+ def test_support_key?
24
+ assert_predicate(Groonga::Hash.create(:name => "Users",
25
+ :key_type => "ShortText"),
26
+ :support_key?)
27
+ end
28
+
29
+ def test_delete
30
+ bookmarks_path = @tables_dir + "bookmarks"
31
+ bookmarks = Groonga::Hash.create(:name => "Bookmarks",
32
+ :path => bookmarks_path.to_s)
33
+
34
+ bookmarks.add("groonga")
35
+ google = bookmarks.add("Google")
36
+ cutter = bookmarks.add("Cutter")
37
+
38
+ assert_equal(["groonga", "Google", "Cutter"],
39
+ bookmarks.collect {|bookmark| bookmark.key})
40
+
41
+ bookmarks.delete(google.id)
42
+ assert_equal(["groonga", "Cutter"],
43
+ bookmarks.collect {|bookmark| bookmark.key})
44
+
45
+ bookmarks.delete(cutter.key)
46
+ assert_equal(["groonga"],
47
+ bookmarks.collect {|bookmark| bookmark.key})
48
+ end
49
+
50
+ def test_value
51
+ bookmarks_path = @tables_dir + "bookmarks"
52
+ bookmarks = Groonga::Hash.create(:name => "Bookmarks",
53
+ :path => bookmarks_path.to_s,
54
+ :key_type => "ShortText",
55
+ :value_type => "UInt32")
56
+ bookmarks.set_value("http://google.com/", 29)
57
+ assert_equal(29, bookmarks.value("http://google.com/"))
58
+ end
59
+
60
+ def test_column_value
61
+ bookmarks_path = @tables_dir + "bookmarks"
62
+ bookmarks = Groonga::Hash.create(:name => "Bookmarks",
63
+ :path => bookmarks_path.to_s,
64
+ :key_type => "ShortText")
65
+ bookmarks.define_column("uri", "ShortText")
66
+ bookmarks.set_column_value("google", "uri", "http://google.com/")
67
+ assert_equal("http://google.com/", bookmarks.column_value("google", "uri"))
68
+ end
69
+
70
+ def test_array_reference
71
+ bookmarks_path = @tables_dir + "bookmarks"
72
+ bookmarks = Groonga::Hash.create(:name => "bookmarks",
73
+ :path => bookmarks_path.to_s,
74
+ :key_type => "ShortText")
75
+ bookmark = bookmarks.add("http://google.com/")
76
+ assert_equal(bookmark, bookmarks["http://google.com/"])
77
+ end
78
+
79
+ def test_inspect_anonymous
80
+ path = @tables_dir + "anoymous.groonga"
81
+ anonymous_table = Groonga::Hash.create(:path => path.to_s)
82
+ assert_equal("#<Groonga::Hash " +
83
+ "id: <#{anonymous_table.id}>, " +
84
+ "name: (anonymous), " +
85
+ "path: <#{path}>, " +
86
+ "domain: <ShortText>, " +
87
+ "range: (nil), " +
88
+ "flags: <>, " +
89
+ "encoding: <#{encoding.inspect}>, " +
90
+ "size: <0>>",
91
+ anonymous_table.inspect)
92
+ end
93
+
94
+ def test_inspect_anonymous_temporary
95
+ anonymous_table = Groonga::Hash.create
96
+ assert_equal("#<Groonga::Hash " +
97
+ "id: <#{anonymous_table.id}>, " +
98
+ "name: (anonymous), " +
99
+ "path: (temporary), " +
100
+ "domain: <ShortText>, " +
101
+ "range: (nil), " +
102
+ "flags: <>, " +
103
+ "encoding: <#{encoding.inspect}>, " +
104
+ "size: <0>>",
105
+ anonymous_table.inspect)
106
+ end
107
+
108
+ def test_inspect_named
109
+ path = @tables_dir + "named.groonga"
110
+ named_table = Groonga::Hash.create(:name => "Users", :path => path.to_s)
111
+ assert_equal("#<Groonga::Hash " +
112
+ "id: <#{named_table.id}>, " +
113
+ "name: <Users>, " +
114
+ "path: <#{path}>, " +
115
+ "domain: <ShortText>, " +
116
+ "range: (nil), " +
117
+ "flags: <>, " +
118
+ "encoding: <#{encoding.inspect}>, " +
119
+ "size: <0>>",
120
+ named_table.inspect)
121
+ end
122
+
123
+ def test_inspect_temporary
124
+ named_table = Groonga::Hash.create
125
+ assert_equal("#<Groonga::Hash " +
126
+ "id: <#{named_table.id}>, " +
127
+ "name: (anonymous), " +
128
+ "path: (temporary), " +
129
+ "domain: <ShortText>, " +
130
+ "range: (nil), " +
131
+ "flags: <>, " +
132
+ "encoding: <#{encoding.inspect}>, " +
133
+ "size: <0>>",
134
+ named_table.inspect)
135
+ end
136
+
137
+ def test_encoding
138
+ assert_equal(Groonga::Encoding.default,
139
+ Groonga::Hash.create.encoding)
140
+ end
141
+
142
+ def test_tokenizer
143
+ hash = Groonga::Hash.create
144
+ assert_nil(hash.default_tokenizer)
145
+ hash.default_tokenizer = "TokenBigram"
146
+ assert_equal(Groonga::Context.default["TokenBigram"],
147
+ hash.default_tokenizer)
148
+ end
149
+
150
+ def test_search
151
+ users = Groonga::Array.create(:name => "Users")
152
+ users.define_column("name", "ShortText")
153
+
154
+ bookmarks = Groonga::Hash.create(:name => "Bookmarks",
155
+ :key_type => "ShortText")
156
+ bookmarks.define_column("user_id", users)
157
+
158
+ daijiro = users.add
159
+ daijiro["name"] = "daijiro"
160
+ gunyarakun = users.add
161
+ gunyarakun["name"] = "gunyarakun"
162
+
163
+ groonga = bookmarks.add("http://groonga.org/")
164
+ groonga["user_id"] = daijiro
165
+
166
+ records = bookmarks.search("http://groonga.org/")
167
+ assert_equal(["daijiro"],
168
+ records.records.collect {|record| record["user_id.name"]})
169
+ end
170
+
171
+ def test_add
172
+ users = Groonga::Hash.create(:name => "Users")
173
+ users.define_column("address", "Text")
174
+ me = users.add("me", :address => "me@example.com")
175
+ assert_equal("me@example.com", me[:address])
176
+ end
177
+
178
+ def test_default_tokenizer_on_create
179
+ terms = Groonga::Hash.create(:name => "Terms",
180
+ :default_tokenizer => "TokenTrigram")
181
+ assert_equal(context[Groonga::Type::TRIGRAM],
182
+ terms.default_tokenizer)
183
+ end
184
+
185
+ def test_duplicated_name
186
+ Groonga::Hash.create(:name => "Users")
187
+ assert_raise(Groonga::InvalidArgument) do
188
+ Groonga::Hash.create(:name => "Users")
189
+ end
190
+ end
191
+
192
+ def test_define_index_column_implicit_with_position
193
+ bookmarks = Groonga::Hash.create(:name => "Bookmarks")
194
+ bookmarks.define_column("comment", "Text")
195
+ terms = Groonga::Hash.create(:name => "Terms",
196
+ :default_tokenizer => "TokenBigram")
197
+ index = terms.define_index_column("comment", bookmarks,
198
+ :source => "Bookmarks.comment")
199
+ bookmarks.add("groonga", :comment => "search engine by Brazil")
200
+ bookmarks.add("google", :comment => "search engine by Google")
201
+ bookmarks.add("ruby", :comment => "programing language")
202
+
203
+ assert_equal(["groonga", "google"],
204
+ index.search("engine").collect {|record| record.key.key})
205
+ end
206
+
207
+ def test_has_key?
208
+ users = Groonga::Hash.create(:name => "Users")
209
+ assert_false(users.has_key?("morita"))
210
+ users.add("morita")
211
+ assert_true(users.has_key?("morita"))
212
+ end
213
+
214
+ def test_big_key
215
+ hash = Groonga::Hash.create(:key_type => "UInt64")
216
+ assert_nothing_raised do
217
+ hash.add(1 << 63)
218
+ end
219
+ end
220
+
221
+ def test_value_by_key
222
+ users = Groonga::Hash.create(:key_type => "ShortText",
223
+ :value_type => "Int32")
224
+ key = "niku"
225
+ users.add(key)
226
+ users.set_value(key, 29)
227
+ assert_equal(29, users.value(key))
228
+ end
229
+
230
+ def test_value_by_id
231
+ users = Groonga::Hash.create(:key_type => "ShortText",
232
+ :value_type => "Int32")
233
+ user_id = users.add("niku").id
234
+ users.set_value(user_id, 29, :id => true)
235
+ assert_equal(29, users.value(user_id, :id => true))
236
+ end
237
+
238
+ def test_id
239
+ users = Groonga::Hash.create(:key_type => "ShortText")
240
+
241
+ key = "niku"
242
+ assert_nil(users.id(key))
243
+ user_id = users.add(key).id
244
+ assert_equal(user_id, users.id(key))
245
+ end
246
+
247
+ def test_set_multi_values
248
+ users = Groonga::Hash.create(:name => "Users",
249
+ :key_type => "ShortText")
250
+ users.define_column("self_introduction", "ShortText")
251
+ users.define_column("age", "UInt32")
252
+
253
+ key = "niku"
254
+ niku = users.add(key)
255
+ assert_equal({
256
+ "_id" => niku.id,
257
+ "_key" => key,
258
+ "self_introduction" => nil,
259
+ "age" => 0,
260
+ },
261
+ niku.attributes)
262
+ users[key] = {
263
+ "self_introduction" => "I'm a meet lover.",
264
+ "age" => 29
265
+ }
266
+ assert_equal({
267
+ "_id" => niku.id,
268
+ "_key" => key,
269
+ "self_introduction" => "I'm a meet lover.",
270
+ "age" => 29,
271
+ },
272
+ niku.attributes)
273
+ end
274
+
275
+ def test_set_multi_values_for_nonexistent_record
276
+ users = Groonga::Hash.create(:name => "Users",
277
+ :key_type => "ShortText")
278
+ users.define_column("self_introduction", "ShortText")
279
+ users.define_column("age", "UInt32")
280
+
281
+ key = "niku"
282
+ users[key] = {
283
+ "self_introduction" => "I'm a meet lover.",
284
+ "age" => 29
285
+ }
286
+
287
+ assert_equal({
288
+ "_id" => users[key].id,
289
+ "_key" => key,
290
+ "self_introduction" => "I'm a meet lover.",
291
+ "age" => 29,
292
+ },
293
+ users[key].attributes)
294
+ end
295
+
296
+ def test_set_multi_values_with_nonexistent_column
297
+ users = Groonga::Hash.create(:name => "Users",
298
+ :key_type => "ShortText")
299
+ users.define_column("self_introduction", "ShortText")
300
+ users.define_column("age", "UInt32")
301
+
302
+ key = "niku"
303
+ inspected_users = users.inspect.sub(/size: <0>/, "size: <1>")
304
+ message = "no such column: <\"nonexistent\">: <#{inspected_users}>"
305
+ assert_raise(Groonga::NoSuchColumn.new(message)) do
306
+ users[key] = {
307
+ "nonexistent" => "No!",
308
+ }
309
+ end
310
+ end
311
+
312
+ def test_added?
313
+ users = Groonga::Hash.create(:name => "Users",
314
+ :key_type => "ShortText")
315
+ bob = users.add("bob")
316
+ assert_predicate(bob, :added?)
317
+ bob_again = users.add("bob")
318
+ assert_not_predicate(bob_again, :added?)
319
+ end
320
+
321
+ def test_defrag
322
+ users = Groonga::Hash.create(:name => "Users",
323
+ :key_type => "ShortText")
324
+ users.define_column("name", "ShortText")
325
+ users.define_column("address", "ShortText")
326
+ 1000.times do |i|
327
+ users.add("user #{i}",
328
+ :name => "user #{i}" * 1000,
329
+ :address => "address #{i}" * 1000)
330
+ end
331
+ assert_equal(7, users.defrag)
332
+ end
333
+
334
+ def test_rename
335
+ users = Groonga::Hash.create(:name => "Users",
336
+ :key_type => "ShortText")
337
+ name = users.define_column("name", "ShortText")
338
+ address = users.define_column("address", "ShortText")
339
+
340
+ users.rename("People")
341
+ assert_equal(["People", "People.name", "People.address"],
342
+ [users.name, name.name, address.name])
343
+ end
344
+
345
+ def test_each
346
+ users = Groonga::Hash.create(:name => "Users", :key_type => "ShortText")
347
+ users.add("Alice")
348
+ users.add("Bob")
349
+ users.add("Carl")
350
+
351
+ user_names = []
352
+ users.each do |user|
353
+ user_names << user.key
354
+ end
355
+ assert_equal(["Alice", "Bob", "Carl"], user_names)
356
+ end
357
+
358
+ def test_each_without_block
359
+ users = Groonga::Hash.create(:name => "Users", :key_type => "ShortText")
360
+ users.add("Alice")
361
+ users.add("Bob")
362
+ users.add("Carl")
363
+
364
+ user_names = users.each.collect(&:key)
365
+ assert_equal(["Alice", "Bob", "Carl"], user_names)
366
+ end
367
+ end
@@ -0,0 +1,180 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2009-2011 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
+ class IndexColumnTest < Test::Unit::TestCase
19
+ include GroongaTestUtils
20
+
21
+ def setup
22
+ setup_database
23
+ end
24
+
25
+ def test_index?
26
+ articles = Groonga::Array.create(:name => "Articles")
27
+ articles.define_column("content", "Text")
28
+
29
+ terms = Groonga::Hash.create(:name => "Terms",
30
+ :default_tokenizer => "TokenBigram")
31
+ content_index = terms.define_index_column("content", articles,
32
+ :with_section => true)
33
+ assert_predicate(content_index, :index?)
34
+ end
35
+
36
+ def test_vector?
37
+ articles = Groonga::Array.create(:name => "Articles")
38
+ articles.define_column("content", "Text")
39
+
40
+ terms = Groonga::Hash.create(:name => "Terms",
41
+ :default_tokenizer => "TokenBigram")
42
+ content_index = terms.define_index_column("content", articles,
43
+ :with_section => true)
44
+ assert_not_predicate(content_index, :vector?)
45
+ end
46
+
47
+ def test_scalar?
48
+ articles = Groonga::Array.create(:name => "Articles")
49
+ articles.define_column("content", "Text")
50
+
51
+ terms = Groonga::Hash.create(:name => "Terms",
52
+ :default_tokenizer => "TokenBigram")
53
+ content_index = terms.define_index_column("content", articles,
54
+ :with_section => true)
55
+ assert_not_predicate(content_index, :scalar?)
56
+ end
57
+
58
+ def test_array_set_with_record
59
+ articles = Groonga::Array.create(:name => "Articles")
60
+ articles.define_column("content", "Text")
61
+
62
+ terms = Groonga::Hash.create(:name => "Terms",
63
+ :default_tokenizer => "TokenBigram")
64
+ content_index = terms.define_index_column("content", articles,
65
+ :with_section => true)
66
+
67
+ content = <<-EOC
68
+ groonga は組み込み型の全文検索エンジンライブラリです。
69
+ DBMSやスクリプト言語処理系等に組み込むことによって、その
70
+ 全文検索機能を強化することができます。また、リレーショナ
71
+ ルモデルに基づくデータストア機能を内包しており、groonga
72
+ 単体でも高速なデータストアサーバとして使用することができ
73
+ ます。
74
+
75
+ ■全文検索方式
76
+ 転置索引型の全文検索エンジンです。転置索引は圧縮されてファ
77
+ イルに格納され、検索時のディスク読み出し量を小さく、かつ
78
+ 局所的に抑えるように設計されています。用途に応じて以下の
79
+ 索引タイプを選択できます。
80
+ EOC
81
+
82
+ groonga = articles.add(:content => content)
83
+
84
+ content.split(/\n{2,}/).each_with_index do |sentence, i|
85
+ content_index[groonga] = {:value => sentence, :section => i + 1}
86
+ end
87
+ assert_equal([groonga],
88
+ content_index.search("エンジン").collect {|record| record.key})
89
+ end
90
+
91
+ def test_shorter_query_than_ngram
92
+ articles = Groonga::Array.create(:name => "Articles")
93
+ articles.define_column("content", "Text")
94
+
95
+ terms = Groonga::PatriciaTrie.create(:name => "Terms",
96
+ :default_tokenizer => "TokenBigram")
97
+ content_index = terms.define_index_column("content", articles,
98
+ :source => "Articles.content")
99
+ articles.add(:content => 'l')
100
+ articles.add(:content => 'll')
101
+ articles.add(:content => 'hello')
102
+
103
+ assert_search(["hello"], content_index, "he")
104
+ assert_search(["ll", "hello"], content_index, "ll")
105
+ assert_search(["l", "ll", "hello"], content_index, "l")
106
+ end
107
+
108
+ def test_with_section?
109
+ define_index_column_with_flags
110
+ assert_equal({
111
+ :section => true,
112
+ :weight => false,
113
+ :position => false,
114
+ },
115
+ {
116
+ :section => context["Tags.section"].with_section?,
117
+ :weight => context["Tags.weight"].with_section?,
118
+ :position => context["Tags.position"].with_section?,
119
+ })
120
+ end
121
+
122
+ def test_with_weight?
123
+ define_index_column_with_flags
124
+ assert_equal({
125
+ :section => false,
126
+ :weight => true,
127
+ :position => false,
128
+ },
129
+ {
130
+ :section => context["Tags.section"].with_weight?,
131
+ :weight => context["Tags.weight"].with_weight?,
132
+ :position => context["Tags.position"].with_weight?,
133
+ })
134
+ end
135
+
136
+ def test_with_position?
137
+ define_index_column_with_flags
138
+ assert_equal({
139
+ :section => false,
140
+ :weight => false,
141
+ :position => true,
142
+ },
143
+ {
144
+ :section => context["Tags.section"].with_position?,
145
+ :weight => context["Tags.weight"].with_position?,
146
+ :position => context["Tags.position"].with_position?,
147
+ })
148
+ end
149
+
150
+ private
151
+ def assert_search(expected, content_index, keyword)
152
+ result = content_index.search(keyword).collect do |entry|
153
+ entry.key["content"]
154
+ end
155
+ assert_equal(expected, result)
156
+ end
157
+
158
+ def define_index_column_with_flags
159
+ Groonga::Schema.define do |schema|
160
+ schema.create_table("Articles") do |table|
161
+ table.text("tags", :type => :vector)
162
+ end
163
+
164
+ schema.create_table("Tags",
165
+ :type => :patricia_trie,
166
+ :key_type => "ShortText",
167
+ :default_tokenizer => "TokenDelimit") do |table|
168
+ table.index("Articles.tags",
169
+ :name => "section",
170
+ :with_section => true)
171
+ table.index("Articles.tags",
172
+ :name => "weight",
173
+ :with_weight => true)
174
+ table.index("Articles.tags",
175
+ :name => "position",
176
+ :with_position => true)
177
+ end
178
+ end
179
+ end
180
+ end