rroonga 2.0.8 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +2 -2
- data/bin/groonga-index-dump +47 -0
- data/doc/text/news.textile +733 -0
- data/doc/text/tutorial.textile +535 -0
- data/example/bookmark.rb +1 -1
- data/ext/groonga/rb-grn-database.c +21 -24
- data/ext/groonga/rb-grn-double-array-trie.c +50 -58
- data/ext/groonga/rb-grn-exception.c +18 -1
- data/ext/groonga/rb-grn-hash.c +18 -3
- data/ext/groonga/rb-grn-index-column.c +50 -2
- data/ext/groonga/rb-grn-normalizer.c +83 -0
- data/ext/groonga/rb-grn-object.c +18 -14
- data/ext/groonga/rb-grn-patricia-trie.c +17 -2
- data/ext/groonga/rb-grn-query-logger.c +263 -0
- data/ext/groonga/rb-grn-snippet.c +6 -0
- data/ext/groonga/rb-grn-table-key-support.c +204 -13
- data/ext/groonga/rb-grn-table.c +124 -46
- data/ext/groonga/rb-grn.h +14 -3
- data/ext/groonga/rb-groonga.c +2 -0
- data/lib/groonga/database.rb +7 -0
- data/lib/groonga/dumper.rb +21 -2
- data/lib/groonga/index-column.rb +170 -0
- data/lib/groonga/query-logger.rb +129 -0
- data/lib/groonga/record.rb +32 -8
- data/lib/groonga/schema.rb +231 -288
- data/lib/groonga.rb +2 -1
- data/rroonga-build.rb +2 -2
- data/rroonga.gemspec +11 -7
- data/test/groonga-test-utils.rb +18 -6
- data/test/test-hash.rb +49 -20
- data/test/test-index-cursor.rb +4 -4
- data/{Gemfile → test/test-normalizer.rb} +9 -5
- data/test/test-pagination.rb +1 -1
- data/test/test-patricia-trie.rb +8 -0
- data/test/test-schema.rb +16 -13
- data/test/test-snippet.rb +5 -0
- data/test/test-table.rb +24 -12
- data/test/test-view.rb +0 -1
- metadata +154 -136
- data/AUTHORS +0 -5
- data/Rakefile +0 -203
- data/bin/groonga-query-log-extract +0 -117
data/rroonga-build.rb
CHANGED
data/rroonga.gemspec
CHANGED
@@ -15,6 +15,8 @@
|
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
16
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
17
17
|
|
18
|
+
require "English"
|
19
|
+
|
18
20
|
base_dir = File.dirname(__FILE__)
|
19
21
|
ext_dir = File.join(base_dir, "ext", "groonga")
|
20
22
|
|
@@ -40,13 +42,15 @@ Gem::Specification.new do |s|
|
|
40
42
|
s.version = guess_version.call(ext_dir)
|
41
43
|
|
42
44
|
authors_path = File.join(base_dir, "AUTHORS")
|
43
|
-
authors
|
45
|
+
authors = []
|
46
|
+
emails = []
|
47
|
+
File.readlines(authors_path).each do |line|
|
44
48
|
if /\s*<([^<>]*)>$/ =~ line
|
45
|
-
|
46
|
-
|
47
|
-
nil
|
49
|
+
authors << $PREMATCH
|
50
|
+
emails << $1
|
48
51
|
end
|
49
|
-
end
|
52
|
+
end
|
53
|
+
|
50
54
|
s.authors = authors
|
51
55
|
s.email = emails
|
52
56
|
|
@@ -56,6 +60,7 @@ Gem::Specification.new do |s|
|
|
56
60
|
s.summary, s.description, = description.split(/\n\n+/, 3)
|
57
61
|
|
58
62
|
s.files = ["README.textile", "AUTHORS", "Rakefile", "Gemfile"]
|
63
|
+
s.files = Dir.glob("doc/text/*.textile")
|
59
64
|
s.files += ["#{s.name}.gemspec"]
|
60
65
|
s.files += ["rroonga-build.rb", "extconf.rb"]
|
61
66
|
Dir.chdir(base_dir) do
|
@@ -83,8 +88,7 @@ Gem::Specification.new do |s|
|
|
83
88
|
s.add_development_dependency("rake-compiler")
|
84
89
|
s.add_development_dependency("bundler")
|
85
90
|
s.add_development_dependency("yard")
|
86
|
-
|
87
|
-
s.add_development_dependency("packnga", ["= 0.9.4"])
|
91
|
+
s.add_development_dependency("packnga")
|
88
92
|
s.add_development_dependency("RedCloth")
|
89
93
|
end
|
90
94
|
|
data/test/groonga-test-utils.rb
CHANGED
@@ -40,6 +40,8 @@ module GroongaTestUtils
|
|
40
40
|
|
41
41
|
setup_encoding
|
42
42
|
setup_context
|
43
|
+
|
44
|
+
@database = nil
|
43
45
|
end
|
44
46
|
|
45
47
|
def setup_tmp_directory
|
@@ -60,8 +62,12 @@ module GroongaTestUtils
|
|
60
62
|
|
61
63
|
def setup_log_path
|
62
64
|
@dump_log = false
|
65
|
+
|
63
66
|
Groonga::Logger.log_path = (@tmp_dir + "groonga.log").to_s
|
64
|
-
|
67
|
+
|
68
|
+
@query_log_path = @tmp_dir + "groonga-query.log"
|
69
|
+
query_logger = Groonga::FileQueryLogger.new(@query_log_path.to_s)
|
70
|
+
Groonga::QueryLogger.register(query_logger, :all => true)
|
65
71
|
end
|
66
72
|
|
67
73
|
def setup_tables_directory
|
@@ -102,8 +108,15 @@ module GroongaTestUtils
|
|
102
108
|
@database = Groonga::Database.create(:path => @database_path.to_s)
|
103
109
|
end
|
104
110
|
|
105
|
-
def
|
111
|
+
def teardown_database
|
112
|
+
return if @database.nil?
|
113
|
+
|
114
|
+
@database.close
|
106
115
|
@database = nil
|
116
|
+
end
|
117
|
+
|
118
|
+
def teardown_sandbox
|
119
|
+
teardown_database
|
107
120
|
Groonga::Context.default.close
|
108
121
|
Groonga::Context.default = nil
|
109
122
|
GC.start
|
@@ -114,17 +127,16 @@ module GroongaTestUtils
|
|
114
127
|
def teardown_log_path
|
115
128
|
return unless @dump_log
|
116
129
|
log_path = Groonga::Logger.log_path
|
117
|
-
query_log_path = Groonga::Logger.query_log_path
|
118
130
|
if File.exist?(log_path)
|
119
131
|
header = "--- log: #{log_path} ---"
|
120
132
|
puts(header)
|
121
133
|
puts(File.read(log_path))
|
122
134
|
puts("-" * header.length)
|
123
135
|
end
|
124
|
-
if
|
125
|
-
header = "--- query log: #{query_log_path} ---"
|
136
|
+
if @query_log_path.exist?
|
137
|
+
header = "--- query log: #{@query_log_path} ---"
|
126
138
|
puts(header)
|
127
|
-
puts(
|
139
|
+
puts(@query_log_path.read)
|
128
140
|
puts("-" * header.length)
|
129
141
|
end
|
130
142
|
end
|
data/test/test-hash.rb
CHANGED
@@ -26,25 +26,38 @@ class HashTest < Test::Unit::TestCase
|
|
26
26
|
:support_key?)
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
29
|
+
class DeleteTest < self
|
30
|
+
setup
|
31
|
+
def setup_data
|
32
|
+
bookmarks_path = @tables_dir + "bookmarks"
|
33
|
+
@bookmarks = Groonga::Hash.create(:name => "Bookmarks",
|
34
|
+
:key_type => "ShortText",
|
35
|
+
:path => bookmarks_path.to_s)
|
36
|
+
|
37
|
+
@groonga = @bookmarks.add("groonga")
|
38
|
+
@google = @bookmarks.add("Google")
|
39
|
+
@cutter = @bookmarks.add("Cutter")
|
40
|
+
end
|
37
41
|
|
38
|
-
|
39
|
-
|
42
|
+
def test_id
|
43
|
+
@bookmarks.delete(@google.id)
|
44
|
+
assert_equal(["groonga", "Cutter"],
|
45
|
+
@bookmarks.collect {|bookmark| bookmark.key})
|
46
|
+
end
|
40
47
|
|
41
|
-
|
42
|
-
|
43
|
-
|
48
|
+
def test_key
|
49
|
+
@bookmarks.delete(@cutter.key)
|
50
|
+
assert_equal(["groonga", "Google"],
|
51
|
+
@bookmarks.collect {|bookmark| bookmark.key})
|
52
|
+
end
|
44
53
|
|
45
|
-
|
46
|
-
|
47
|
-
|
54
|
+
def test_expression
|
55
|
+
@bookmarks.delete do |record|
|
56
|
+
record.key == @groonga.key
|
57
|
+
end
|
58
|
+
assert_equal(["Google", "Cutter"],
|
59
|
+
@bookmarks.collect {|bookmark| bookmark.key})
|
60
|
+
end
|
48
61
|
end
|
49
62
|
|
50
63
|
def test_value
|
@@ -86,8 +99,10 @@ class HashTest < Test::Unit::TestCase
|
|
86
99
|
"domain: <ShortText>, " +
|
87
100
|
"range: (nil), " +
|
88
101
|
"flags: <>, " +
|
102
|
+
"size: <0>, " +
|
89
103
|
"encoding: <#{encoding.inspect}>, " +
|
90
|
-
"
|
104
|
+
"default_tokenizer: (nil), " +
|
105
|
+
"normalizer: (nil)>",
|
91
106
|
anonymous_table.inspect)
|
92
107
|
end
|
93
108
|
|
@@ -100,8 +115,10 @@ class HashTest < Test::Unit::TestCase
|
|
100
115
|
"domain: <ShortText>, " +
|
101
116
|
"range: (nil), " +
|
102
117
|
"flags: <>, " +
|
118
|
+
"size: <0>, " +
|
103
119
|
"encoding: <#{encoding.inspect}>, " +
|
104
|
-
"
|
120
|
+
"default_tokenizer: (nil), " +
|
121
|
+
"normalizer: (nil)>",
|
105
122
|
anonymous_table.inspect)
|
106
123
|
end
|
107
124
|
|
@@ -115,8 +132,10 @@ class HashTest < Test::Unit::TestCase
|
|
115
132
|
"domain: <ShortText>, " +
|
116
133
|
"range: (nil), " +
|
117
134
|
"flags: <>, " +
|
135
|
+
"size: <0>, " +
|
118
136
|
"encoding: <#{encoding.inspect}>, " +
|
119
|
-
"
|
137
|
+
"default_tokenizer: (nil), " +
|
138
|
+
"normalizer: (nil)>",
|
120
139
|
named_table.inspect)
|
121
140
|
end
|
122
141
|
|
@@ -129,8 +148,10 @@ class HashTest < Test::Unit::TestCase
|
|
129
148
|
"domain: <ShortText>, " +
|
130
149
|
"range: (nil), " +
|
131
150
|
"flags: <>, " +
|
151
|
+
"size: <0>, " +
|
132
152
|
"encoding: <#{encoding.inspect}>, " +
|
133
|
-
"
|
153
|
+
"default_tokenizer: (nil), " +
|
154
|
+
"normalizer: (nil)>",
|
134
155
|
named_table.inspect)
|
135
156
|
end
|
136
157
|
|
@@ -147,6 +168,14 @@ class HashTest < Test::Unit::TestCase
|
|
147
168
|
hash.default_tokenizer)
|
148
169
|
end
|
149
170
|
|
171
|
+
def test_normalizer
|
172
|
+
hash = Groonga::Hash.create
|
173
|
+
assert_nil(hash.normalizer)
|
174
|
+
hash.normalizer = "NormalizerAuto"
|
175
|
+
assert_equal(Groonga["NormalizerAuto"],
|
176
|
+
hash.normalizer)
|
177
|
+
end
|
178
|
+
|
150
179
|
def test_search
|
151
180
|
users = Groonga::Array.create(:name => "Users")
|
152
181
|
users.define_column("name", "ShortText")
|
data/test/test-index-cursor.rb
CHANGED
@@ -134,10 +134,10 @@ class IndexCursorTest < Test::Unit::TestCase
|
|
134
134
|
:term_frequency, :weight, :n_rest_postings]
|
135
135
|
|
136
136
|
expected = [
|
137
|
-
[1, 1, 1, 0, 1, 0,
|
138
|
-
[2, 1, 1,
|
139
|
-
[2, 1, 2, 0, 1, 0,
|
140
|
-
[3, 1, 2,
|
137
|
+
[1, 1, 1, 0, 1, 0, 0],
|
138
|
+
[2, 1, 1, 1, 1, 0, 0],
|
139
|
+
[2, 1, 2, 0, 1, 0, 0],
|
140
|
+
[3, 1, 2, 2, 1, 0, 0],
|
141
141
|
[3, 1, 3, 0, 1, 0, 0],
|
142
142
|
[3, 1, 4, 1, 1, 0, 0],
|
143
143
|
[3, 1, 5, 3, 1, 0, 0],
|
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# Copyright (C) 2011 Kouhei Sutou <kou@clear-code.com>
|
1
|
+
# Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
|
4
2
|
#
|
5
3
|
# This library is free software; you can redistribute it and/or
|
6
4
|
# modify it under the terms of the GNU Lesser General Public
|
@@ -15,6 +13,12 @@
|
|
15
13
|
# License along with this library; if not, write to the Free Software
|
16
14
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
17
15
|
|
18
|
-
|
16
|
+
class NormalizerTest < Test::Unit::TestCase
|
17
|
+
include GroongaTestUtils
|
18
|
+
|
19
|
+
setup :setup_database
|
19
20
|
|
20
|
-
|
21
|
+
def test_normalize
|
22
|
+
assert_equal("abc", Groonga::Normalizer.normalize("AbC"))
|
23
|
+
end
|
24
|
+
end
|
data/test/test-pagination.rb
CHANGED
@@ -244,6 +244,6 @@ class PaginationTest < Test::Unit::TestCase
|
|
244
244
|
:first_page? => users.first_page?,
|
245
245
|
:last_page? => users.last_page?,
|
246
246
|
:have_pages? => users.have_pages?,
|
247
|
-
:keys => users.collect
|
247
|
+
:keys => users.collect {|record| record.value.key})
|
248
248
|
end
|
249
249
|
end
|
data/test/test-patricia-trie.rb
CHANGED
@@ -40,6 +40,14 @@ class PatriciaTrieTest < Test::Unit::TestCase
|
|
40
40
|
trie.default_tokenizer)
|
41
41
|
end
|
42
42
|
|
43
|
+
def test_normalizer
|
44
|
+
trie = Groonga::PatriciaTrie.create
|
45
|
+
assert_nil(trie.normalizer)
|
46
|
+
trie.normalizer = "NormalizerAuto"
|
47
|
+
assert_equal(Groonga["NormalizerAuto"],
|
48
|
+
trie.normalizer)
|
49
|
+
end
|
50
|
+
|
43
51
|
def test_search
|
44
52
|
users = Groonga::Array.create(:name => "Users")
|
45
53
|
users.define_column("name", "ShortText")
|
data/test/test-schema.rb
CHANGED
@@ -108,10 +108,11 @@ class SchemaTest < Test::Unit::TestCase
|
|
108
108
|
"domain: <Int32>, " +
|
109
109
|
"range: <UInt32>, " +
|
110
110
|
"flags: <>, " +
|
111
|
+
"size: <0>, " +
|
111
112
|
"encoding: <#{Groonga::Encoding.default.inspect}>, " +
|
112
|
-
"
|
113
|
+
"default_tokenizer: <#{tokenizer.name}>, " +
|
114
|
+
"normalizer: (nil)>",
|
113
115
|
table.inspect)
|
114
|
-
assert_equal(tokenizer, table.default_tokenizer)
|
115
116
|
end
|
116
117
|
|
117
118
|
def test_rename
|
@@ -154,9 +155,9 @@ class SchemaTest < Test::Unit::TestCase
|
|
154
155
|
:path => path.to_s,
|
155
156
|
:value_type => "Float",
|
156
157
|
:default_tokenizer => "TokenBigram",
|
157
|
-
:key_normalize => true,
|
158
158
|
:key_with_sis => true,
|
159
|
-
:named_path => true
|
159
|
+
:named_path => true,
|
160
|
+
:normalizer => "NormalizerAuto") do |table|
|
160
161
|
end
|
161
162
|
table = context["Posts"]
|
162
163
|
assert_equal("#<Groonga::PatriciaTrie " +
|
@@ -165,11 +166,12 @@ class SchemaTest < Test::Unit::TestCase
|
|
165
166
|
"path: <#{path}>, " +
|
166
167
|
"domain: <Int32>, " +
|
167
168
|
"range: <Float>, " +
|
168
|
-
"flags: <KEY_WITH_SIS
|
169
|
+
"flags: <KEY_WITH_SIS>, " +
|
170
|
+
"size: <0>, " +
|
169
171
|
"encoding: <#{Groonga::Encoding.default.inspect}>, " +
|
170
|
-
"
|
172
|
+
"default_tokenizer: <TokenBigram>, " +
|
173
|
+
"normalizer: <NormalizerAuto>>",
|
171
174
|
table.inspect)
|
172
|
-
assert_equal(context["TokenBigram"], table.default_tokenizer)
|
173
175
|
end
|
174
176
|
|
175
177
|
def test_rename
|
@@ -206,15 +208,15 @@ class SchemaTest < Test::Unit::TestCase
|
|
206
208
|
end
|
207
209
|
|
208
210
|
def test_full_option
|
209
|
-
path = @tmp_dir + "
|
211
|
+
path = @tmp_dir + "double-array-trie.groonga"
|
210
212
|
Groonga::Schema.create_table("Posts",
|
211
213
|
:type => :double_array_trie,
|
212
214
|
:key_type => "integer",
|
213
215
|
:path => path.to_s,
|
214
216
|
:value_type => "Float",
|
215
217
|
:default_tokenizer => "TokenBigram",
|
216
|
-
:
|
217
|
-
:
|
218
|
+
:named_path => true,
|
219
|
+
:normalizer => "NormalizerAuto") do |table|
|
218
220
|
end
|
219
221
|
table = context["Posts"]
|
220
222
|
assert_equal("#<Groonga::DoubleArrayTrie " +
|
@@ -223,11 +225,12 @@ class SchemaTest < Test::Unit::TestCase
|
|
223
225
|
"path: <#{path}>, " +
|
224
226
|
"domain: <Int32>, " +
|
225
227
|
"range: <Float>, " +
|
226
|
-
"flags:
|
228
|
+
"flags: <>, " +
|
229
|
+
"size: <0>, " +
|
227
230
|
"encoding: <#{Groonga::Encoding.default.inspect}>, " +
|
228
|
-
"
|
231
|
+
"default_tokenizer: <TokenBigram>, " +
|
232
|
+
"normalizer: <NormalizerAuto>>",
|
229
233
|
table.inspect)
|
230
|
-
assert_equal(context["TokenBigram"], table.default_tokenizer)
|
231
234
|
end
|
232
235
|
|
233
236
|
def test_rename
|
data/test/test-snippet.rb
CHANGED
data/test/test-table.rb
CHANGED
@@ -277,19 +277,30 @@ class TableTest < Test::Unit::TestCase
|
|
277
277
|
bookmark["created_at"].to_a)
|
278
278
|
end
|
279
279
|
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
280
|
+
class DeleteTest < self
|
281
|
+
setup
|
282
|
+
def setup_data
|
283
|
+
bookmarks_path = @tables_dir + "bookmarks"
|
284
|
+
@bookmarks = Groonga::Array.create(:name => "Bookmarks",
|
285
|
+
:path => bookmarks_path.to_s)
|
286
|
+
|
287
|
+
@bookmark_records = []
|
288
|
+
@bookmark_records << @bookmarks.add
|
289
|
+
@bookmark_records << @bookmarks.add
|
290
|
+
@bookmark_records << @bookmarks.add
|
291
|
+
end
|
284
292
|
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
293
|
+
def test_id
|
294
|
+
@bookmarks.delete(@bookmark_records.last.id)
|
295
|
+
assert_equal([1, 2], @bookmarks.collect(&:id))
|
296
|
+
end
|
289
297
|
|
290
|
-
|
291
|
-
|
292
|
-
|
298
|
+
def test_expression
|
299
|
+
@bookmarks.delete do |record|
|
300
|
+
record.id < 3
|
301
|
+
end
|
302
|
+
assert_equal([3], @bookmarks.collect(&:id))
|
303
|
+
end
|
293
304
|
end
|
294
305
|
|
295
306
|
def test_remove
|
@@ -407,8 +418,9 @@ class TableTest < Test::Unit::TestCase
|
|
407
418
|
empty1 = bookmarks.add
|
408
419
|
groonga = bookmarks.add(:uri => "http://groonga.org/")
|
409
420
|
empty2 = bookmarks.add
|
421
|
+
sorted_bookmarks = bookmarks.sort([{:key => "uri", :order => :descending}])
|
410
422
|
assert_equal([groonga, empty1, empty2],
|
411
|
-
|
423
|
+
sorted_bookmarks.collect(&:value))
|
412
424
|
end
|
413
425
|
|
414
426
|
def test_group
|