rroonga 2.0.5 → 2.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/Rakefile +5 -1
  2. data/ext/groonga/extconf.rb +36 -4
  3. data/ext/groonga/rb-grn-accessor.c +8 -10
  4. data/ext/groonga/rb-grn-array-cursor.c +2 -2
  5. data/ext/groonga/rb-grn-array.c +35 -59
  6. data/ext/groonga/rb-grn-column.c +105 -192
  7. data/ext/groonga/rb-grn-context.c +60 -63
  8. data/ext/groonga/rb-grn-database.c +27 -37
  9. data/ext/groonga/rb-grn-double-array-trie-cursor.c +3 -3
  10. data/ext/groonga/rb-grn-double-array-trie.c +75 -126
  11. data/ext/groonga/rb-grn-encoding.c +27 -27
  12. data/ext/groonga/rb-grn-expression.c +29 -24
  13. data/ext/groonga/rb-grn-fix-size-column.c +7 -9
  14. data/ext/groonga/rb-grn-hash-cursor.c +3 -3
  15. data/ext/groonga/rb-grn-hash.c +57 -108
  16. data/ext/groonga/rb-grn-index-column.c +17 -29
  17. data/ext/groonga/rb-grn-logger.c +11 -14
  18. data/ext/groonga/rb-grn-object.c +51 -94
  19. data/ext/groonga/rb-grn-patricia-trie-cursor.c +2 -2
  20. data/ext/groonga/rb-grn-patricia-trie.c +161 -276
  21. data/ext/groonga/rb-grn-plugin.c +6 -10
  22. data/ext/groonga/rb-grn-table-cursor.c +14 -21
  23. data/ext/groonga/rb-grn-table-key-support.c +32 -35
  24. data/ext/groonga/rb-grn-table.c +149 -252
  25. data/ext/groonga/rb-grn-variable.c +6 -7
  26. data/ext/groonga/rb-grn-view-accessor.c +1 -1
  27. data/ext/groonga/rb-grn-view-cursor.c +2 -2
  28. data/ext/groonga/rb-grn-view.c +28 -45
  29. data/ext/groonga/rb-grn.h +1 -1
  30. data/ext/groonga/rb-groonga.c +6 -6
  31. data/lib/groonga/database.rb +1 -1
  32. data/lib/groonga/dumper.rb +109 -33
  33. data/lib/groonga/expression-builder.rb +24 -0
  34. data/lib/groonga/pagination.rb +30 -24
  35. data/lib/groonga/record.rb +21 -18
  36. data/lib/groonga/schema.rb +156 -140
  37. data/test/test-command-select.rb +66 -1
  38. data/test/test-database-dumper.rb +50 -10
  39. data/test/test-expression-builder.rb +41 -0
  40. metadata +4 -4
@@ -17,7 +17,9 @@ class CommandSelectTest < Test::Unit::TestCase
17
17
  include GroongaTestUtils
18
18
 
19
19
  setup :setup_database
20
- setup
20
+ setup :setup_tables
21
+ setup :setup_data
22
+
21
23
  def setup_data
22
24
  Groonga::Schema.define do |schema|
23
25
  schema.create_table("Books",
@@ -136,6 +138,68 @@ class CommandSelectTest < Test::Unit::TestCase
136
138
  end
137
139
  end
138
140
 
141
+ class QueryFlagsTest < self
142
+ def setup_tables
143
+ Groonga::Schema.define do |schema|
144
+ schema.create_table("Entries",
145
+ :type => :hash,
146
+ :key_type => "ShortText") do |table|
147
+ table.text("content")
148
+ end
149
+
150
+ schema.create_table("Terms",
151
+ :type => :patricia_trie,
152
+ :default_tokenizer => "TokenBigram",
153
+ :key_type => "ShortText",
154
+ :key_normalize => true) do |table|
155
+ table.index("Entries.content",
156
+ :name => "entries_content_index", :with_position => true)
157
+ end
158
+ end
159
+
160
+ @entries = Groonga["Entries"]
161
+ end
162
+
163
+ class TestAllowLeadingNot < self
164
+ def setup_data
165
+ @first_post =
166
+ @entries.add("The first post!",
167
+ "content" => "Welcome! This is my first post!")
168
+ @groonga =
169
+ @entries.add("Groonga",
170
+ "content" => "I started to use groonga. It's very fast!")
171
+ @mroonga =
172
+ @entries.add("Mroonga",
173
+ "content" => "I also started to use mroonga. " +
174
+ "It's also very fast! Really fast!")
175
+ end
176
+
177
+ def test_true
178
+ result = @entries.select do |record|
179
+ record[:content].match("-mroonga", :allow_leading_not => true)
180
+ end
181
+ assert_equal_select_result([@first_post, @groonga],
182
+ result)
183
+ end
184
+
185
+ def test_false
186
+ assert_raise(Groonga::SyntaxError) do
187
+ @entries.select do |record|
188
+ record[:content].match("-mroonga", :allow_leading_not => false)
189
+ end
190
+ end
191
+ end
192
+
193
+ def test_default
194
+ assert_raise(Groonga::SyntaxError) do
195
+ @entries.select do |record|
196
+ record[:content].match("-mroonga")
197
+ end
198
+ end
199
+ end
200
+ end
201
+ end
202
+
139
203
  private
140
204
  def normalize_drill_down(drill_down)
141
205
  normalized_drill_down = {}
@@ -178,4 +242,5 @@ class CommandSelectTest < Test::Unit::TestCase
178
242
  result.records)
179
243
  end
180
244
  end
245
+
181
246
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2011 Kouhei Sutou <kou@clear-code.com>
1
+ # Copyright (C) 2011-2012 Kouhei Sutou <kou@clear-code.com>
2
2
  #
3
3
  # This library is free software; you can redistribute it and/or
4
4
  # modify it under the terms of the GNU Lesser General Public
@@ -66,6 +66,16 @@ class DatabaseDumperTest < Test::Unit::TestCase
66
66
 
67
67
  def dumped_schema
68
68
  <<-EOS
69
+ #{dumped_schema_tables}
70
+
71
+ #{dumped_schema_reference_columns}
72
+
73
+ #{dumped_schema_index_columns}
74
+ EOS
75
+ end
76
+
77
+ def dumped_schema_tables
78
+ <<-EOS.chomp
69
79
  table_create Posts TABLE_NO_KEY
70
80
  column_create Posts created_at COLUMN_SCALAR Time
71
81
  column_create Posts n_goods COLUMN_SCALAR UInt32
@@ -79,10 +89,18 @@ column_create Tags name COLUMN_SCALAR Text
79
89
 
80
90
  table_create Users TABLE_HASH_KEY --key_type ShortText
81
91
  column_create Users name COLUMN_SCALAR Text
92
+ EOS
93
+ end
82
94
 
95
+ def dumped_schema_reference_columns
96
+ <<-EOS.chomp
83
97
  column_create Posts author COLUMN_SCALAR Users
84
98
  column_create Posts tags COLUMN_VECTOR Tags
99
+ EOS
100
+ end
85
101
 
102
+ def dumped_schema_index_columns
103
+ <<-EOS.chomp
86
104
  column_create Tags Posts_tag_text COLUMN_INDEX Posts tag_text
87
105
 
88
106
  column_create Users Posts_author COLUMN_INDEX Posts author
@@ -110,7 +128,9 @@ EOS
110
128
 
111
129
  def test_default
112
130
  assert_equal(<<-EOS, dump)
113
- #{dumped_schema.chomp}
131
+ #{dumped_schema_tables}
132
+
133
+ #{dumped_schema_reference_columns}
114
134
 
115
135
  load --table Posts
116
136
  [
@@ -130,30 +150,40 @@ load --table Users
130
150
  ["_key","name"],
131
151
  ["mori",""]
132
152
  ]
153
+
154
+ #{dumped_schema_index_columns}
133
155
  EOS
134
156
  end
135
157
 
136
158
  def test_limit_tables
137
159
  assert_equal(<<-EOS, dump(:tables => ["Posts"]))
138
- #{dumped_schema.chomp}
160
+ #{dumped_schema_tables}
161
+
162
+ #{dumped_schema_reference_columns}
139
163
 
140
164
  load --table Posts
141
165
  [
142
166
  ["_id","author","created_at","n_goods","published","rank","tag_text","tags","title"],
143
167
  [1,"mori",1268034720.0,4,true,10,"search mori",["search","mori"],"Why search engine find?"]
144
168
  ]
169
+
170
+ #{dumped_schema_index_columns}
145
171
  EOS
146
172
  end
147
173
 
148
174
  def test_limit_tables_with_regexp
149
175
  assert_equal(<<-EOS, dump(:tables => [/Posts?/]))
150
- #{dumped_schema.chomp}
176
+ #{dumped_schema_tables}
177
+
178
+ #{dumped_schema_reference_columns}
151
179
 
152
180
  load --table Posts
153
181
  [
154
182
  ["_id","author","created_at","n_goods","published","rank","tag_text","tags","title"],
155
183
  [1,"mori",1268034720.0,4,true,10,"search mori",["search","mori"],"Why search engine find?"]
156
184
  ]
185
+
186
+ #{dumped_schema_index_columns}
157
187
  EOS
158
188
  end
159
189
 
@@ -162,7 +192,9 @@ EOS
162
192
  :exclude_tables => ["Posts"],
163
193
  }
164
194
  assert_equal(<<-EOS, dump(dump_options))
165
- #{dumped_schema.chomp}
195
+ #{dumped_schema_tables}
196
+
197
+ #{dumped_schema_reference_columns}
166
198
 
167
199
  load --table Tags
168
200
  [
@@ -176,6 +208,8 @@ load --table Users
176
208
  ["_key","name"],
177
209
  ["mori",""]
178
210
  ]
211
+
212
+ #{dumped_schema_index_columns}
179
213
  EOS
180
214
  end
181
215
 
@@ -184,7 +218,9 @@ EOS
184
218
  :exclude_tables => [/Posts?/],
185
219
  }
186
220
  assert_equal(<<-EOS, dump(dump_options))
187
- #{dumped_schema.chomp}
221
+ #{dumped_schema_tables}
222
+
223
+ #{dumped_schema_reference_columns}
188
224
 
189
225
  load --table Tags
190
226
  [
@@ -198,6 +234,8 @@ load --table Users
198
234
  ["_key","name"],
199
235
  ["mori",""]
200
236
  ]
237
+
238
+ #{dumped_schema_index_columns}
201
239
  EOS
202
240
  end
203
241
 
@@ -207,13 +245,17 @@ EOS
207
245
  :tables => ["Posts", "Users"],
208
246
  }
209
247
  assert_equal(<<-EOS, dump(dump_options))
210
- #{dumped_schema.chomp}
248
+ #{dumped_schema_tables}
249
+
250
+ #{dumped_schema_reference_columns}
211
251
 
212
252
  load --table Users
213
253
  [
214
254
  ["_key","name"],
215
255
  ["mori",""]
216
256
  ]
257
+
258
+ #{dumped_schema_index_columns}
217
259
  EOS
218
260
  end
219
261
 
@@ -241,9 +283,7 @@ EOS
241
283
  end
242
284
 
243
285
  def test_no_tables
244
- assert_equal(<<-EOS, dump(:dump_tables => false))
245
- #{dumped_schema.chomp}
246
- EOS
286
+ assert_equal(dumped_schema, dump(:dump_tables => false))
247
287
  end
248
288
  end
249
289
 
@@ -398,6 +398,47 @@ EOC
398
398
  end
399
399
  end
400
400
 
401
+ class TermExtractTest < self
402
+ def setup_tables
403
+ Groonga::Schema.define do |schema|
404
+ schema.create_table("Words",
405
+ :type => :patricia_trie,
406
+ :key_type => "ShortText",
407
+ :default_tokenizer => "TokenBigram",
408
+ :key_normalize => true) do |table|
409
+ table.text("content")
410
+ end
411
+ end
412
+
413
+ @words = Groonga["Words"]
414
+ end
415
+
416
+ def setup_data
417
+ @words.add("groonga")
418
+ @words.add("mroonga")
419
+ @words.add("Senna")
420
+ @words.add("Tritonn")
421
+ end
422
+
423
+ def test_table
424
+ result = @words.select do |record|
425
+ record.key.term_extract("Groonga is the successor project to Senna.")
426
+ end
427
+ assert_equal(["groonga", "senna"].sort,
428
+ result.collect {|record| record.key.key}.sort)
429
+ end
430
+
431
+ def test_not_key_column
432
+ message = "term extraction supports _key column only: <content>"
433
+ exception = ArgumentError.new(message)
434
+ assert_raise(exception) do
435
+ @words.select do |record|
436
+ record.content.term_extract("Groonga is the successor project to Senna.")
437
+ end
438
+ end
439
+ end
440
+ end
441
+
401
442
  class RecordTest < self
402
443
  def setup_tables
403
444
  Groonga::Schema.define do |schema|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rroonga
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.5
4
+ version: 2.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-28 00:00:00.000000000 Z
12
+ date: 2012-10-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pkg-config
@@ -349,7 +349,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
349
349
  version: '0'
350
350
  segments:
351
351
  - 0
352
- hash: -2788574132779749485
352
+ hash: -4521341651743360062
353
353
  required_rubygems_version: !ruby/object:Gem::Requirement
354
354
  none: false
355
355
  requirements:
@@ -358,7 +358,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
358
358
  version: '0'
359
359
  segments:
360
360
  - 0
361
- hash: -2788574132779749485
361
+ hash: -4521341651743360062
362
362
  requirements: []
363
363
  rubyforge_project: groonga
364
364
  rubygems_version: 1.8.23