rroonga 2.0.2 → 2.0.3
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.
- data/AUTHORS +5 -0
- data/Gemfile +1 -12
- data/Rakefile +4 -57
- data/bin/grndump +11 -1
- data/ext/groonga/extconf.rb +125 -54
- data/ext/groonga/rb-grn-context.c +25 -7
- data/ext/groonga/rb-grn-database.c +25 -0
- data/ext/groonga/rb-grn-object.c +19 -7
- data/ext/groonga/rb-grn-table.c +8 -10
- data/ext/groonga/rb-grn.h +9 -2
- data/lib/groonga/dumper.rb +2 -2
- data/lib/groonga/expression-builder.rb +33 -18
- data/rroonga-build.rb +1 -1
- metadata +97 -180
- data/TODO +0 -0
- data/test/groonga-test-utils.rb +0 -139
- data/test/run-test.rb +0 -60
- data/test/test-accessor.rb +0 -36
- data/test/test-array.rb +0 -123
- data/test/test-column.rb +0 -350
- data/test/test-command-select.rb +0 -147
- data/test/test-context.rb +0 -130
- data/test/test-database-dumper.rb +0 -259
- data/test/test-database.rb +0 -148
- data/test/test-double-array-trie.rb +0 -164
- data/test/test-encoding.rb +0 -33
- data/test/test-exception.rb +0 -96
- data/test/test-expression-builder.rb +0 -269
- data/test/test-expression.rb +0 -134
- data/test/test-fix-size-column.rb +0 -77
- data/test/test-gqtp.rb +0 -70
- data/test/test-hash.rb +0 -344
- data/test/test-index-column.rb +0 -180
- data/test/test-index-cursor.rb +0 -93
- data/test/test-logger.rb +0 -37
- data/test/test-pagination.rb +0 -249
- data/test/test-patricia-trie.rb +0 -415
- data/test/test-plugin.rb +0 -35
- data/test/test-procedure.rb +0 -37
- data/test/test-query-log.rb +0 -258
- data/test/test-record.rb +0 -569
- data/test/test-remote.rb +0 -63
- data/test/test-schema-create-table.rb +0 -267
- data/test/test-schema-dumper.rb +0 -235
- data/test/test-schema-type.rb +0 -208
- data/test/test-schema-view.rb +0 -90
- data/test/test-schema.rb +0 -886
- data/test/test-snippet.rb +0 -130
- data/test/test-table-cursor.rb +0 -187
- data/test/test-table-dumper.rb +0 -83
- data/test/test-table-offset-and-limit.rb +0 -100
- data/test/test-table-select-mecab.rb +0 -80
- data/test/test-table-select-normalize.rb +0 -57
- data/test/test-table-select-weight.rb +0 -123
- data/test/test-table-select.rb +0 -191
- data/test/test-table.rb +0 -675
- data/test/test-type.rb +0 -79
- data/test/test-variable-size-column.rb +0 -147
- data/test/test-variable.rb +0 -28
- data/test/test-vector-column.rb +0 -76
- data/test/test-version.rb +0 -61
- data/test/test-view.rb +0 -72
data/test/test-procedure.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
# Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
|
2
|
-
#
|
3
|
-
# This library is free software; you can redistribute it and/or
|
4
|
-
# modify it under the terms of the GNU Lesser General Public
|
5
|
-
# License version 2.1 as published by the Free Software Foundation.
|
6
|
-
#
|
7
|
-
# This library is distributed in the hope that it will be useful,
|
8
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
9
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
10
|
-
# Lesser General Public License for more details.
|
11
|
-
#
|
12
|
-
# You should have received a copy of the GNU Lesser General Public
|
13
|
-
# License along with this library; if not, write to the Free Software
|
14
|
-
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
15
|
-
|
16
|
-
class ProcedureTest < Test::Unit::TestCase
|
17
|
-
include GroongaTestUtils
|
18
|
-
|
19
|
-
setup :setup_database
|
20
|
-
|
21
|
-
def test_builtins
|
22
|
-
assert_equal_procedure("TokenDelimit", Groonga::Procedure::DELIMIT)
|
23
|
-
assert_equal_procedure("TokenUnigram", Groonga::Procedure::UNIGRAM)
|
24
|
-
assert_equal_procedure("TokenBigram", Groonga::Procedure::BIGRAM)
|
25
|
-
assert_equal_procedure("TokenTrigram", Groonga::Procedure::TRIGRAM)
|
26
|
-
assert_equal_procedure("TokenMecab", Groonga::Procedure::MECAB,
|
27
|
-
:accept_nil => true)
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
def assert_equal_procedure(expected_name, id, options={})
|
32
|
-
procedure = Groonga::Context.default[id]
|
33
|
-
expected_name = nil if procedure.nil? and options[:accept_nil]
|
34
|
-
assert_equal(expected_name,
|
35
|
-
procedure ? procedure.name : procedure)
|
36
|
-
end
|
37
|
-
end
|
data/test/test-query-log.rb
DELETED
@@ -1,258 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
# Copyright (C) 2011 Kouhei Sutou <kou@clear-code.com>
|
3
|
-
#
|
4
|
-
# This library is free software; you can redistribute it and/or
|
5
|
-
# modify it under the terms of the GNU Lesser General Public
|
6
|
-
# License version 2.1 as published by the Free Software Foundation.
|
7
|
-
#
|
8
|
-
# This library is distributed in the hope that it will be useful,
|
9
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
-
# Lesser General Public License for more details.
|
12
|
-
#
|
13
|
-
# You should have received a copy of the GNU Lesser General Public
|
14
|
-
# License along with this library; if not, write to the Free Software
|
15
|
-
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
16
|
-
|
17
|
-
require "cgi"
|
18
|
-
|
19
|
-
module QueryLogTest
|
20
|
-
module CommandParseTestUtils
|
21
|
-
private
|
22
|
-
def command(name, parameters)
|
23
|
-
Groonga::QueryLog::Command.new(name, parameters)
|
24
|
-
end
|
25
|
-
|
26
|
-
def parse_http_path(command, parameters)
|
27
|
-
path = "/d/#{command}.json"
|
28
|
-
unless parameters.empty?
|
29
|
-
uri_parameters = parameters.collect do |key, value|
|
30
|
-
[CGI.escape(key.to_s), CGI.escape(value.to_s)].join("=")
|
31
|
-
end
|
32
|
-
path << "?"
|
33
|
-
path << uri_parameters.join("&")
|
34
|
-
end
|
35
|
-
Groonga::QueryLog::Command.parse(path)
|
36
|
-
end
|
37
|
-
|
38
|
-
def parse_command_line(command, parameters)
|
39
|
-
command_line = "#{command} --output_type json"
|
40
|
-
parameters.each do |key, value|
|
41
|
-
if /"| / =~ value
|
42
|
-
escaped_value = '"' + value.gsub(/"/, '\"') + '"'
|
43
|
-
else
|
44
|
-
escaped_value = value
|
45
|
-
end
|
46
|
-
command_line << " --#{key} #{escaped_value}"
|
47
|
-
end
|
48
|
-
Groonga::QueryLog::Command.parse(command_line)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
module HTTPCommandParseTestUtils
|
53
|
-
private
|
54
|
-
def parse(command, parameters={})
|
55
|
-
parse_http_path(command, parameters)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
module CommandLineCommandParseTestUtils
|
60
|
-
private
|
61
|
-
def parse(command, parameters={})
|
62
|
-
parse_command_line(command, parameters)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
module SelectCommandParseTests
|
67
|
-
include CommandParseTestUtils
|
68
|
-
|
69
|
-
def test_parameters
|
70
|
-
select = parse("select",
|
71
|
-
:table => "Users",
|
72
|
-
:filter => "age<=30")
|
73
|
-
assert_equal(command("select",
|
74
|
-
"table" => "Users",
|
75
|
-
"filter" => "age<=30",
|
76
|
-
"output_type" => "json"),
|
77
|
-
select)
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_scorer
|
81
|
-
select = parse("select",
|
82
|
-
:table => "Users",
|
83
|
-
:filter => "age<=30",
|
84
|
-
:scorer => "_score = random()")
|
85
|
-
assert_equal("_score = random()", select.scorer)
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_to_uri_format
|
89
|
-
select = parse("select",
|
90
|
-
:table => "Users",
|
91
|
-
:filter => "age<=30")
|
92
|
-
assert_equal("/d/select.json?filter=age%3C%3D30&table=Users",
|
93
|
-
select.to_uri_format)
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_to_command_format
|
97
|
-
select = parse("select",
|
98
|
-
:table => "Users",
|
99
|
-
:filter => "age<=30")
|
100
|
-
assert_equal("select --filter \"age<=30\" " +
|
101
|
-
"--output_type \"json\" --table \"Users\"",
|
102
|
-
select.to_command_format)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
module SelectCommandParseFilterTests
|
107
|
-
include CommandParseTestUtils
|
108
|
-
|
109
|
-
def test_parenthesis
|
110
|
-
filter = 'geo_in_rectangle(location,' +
|
111
|
-
'"35.73360x139.7394","62614x139.7714") && ' +
|
112
|
-
'((type == "たいやき" || type == "和菓子")) && ' +
|
113
|
-
'keyword @ "たいやき" &! keyword @ "白" &! keyword @ "養殖"'
|
114
|
-
select = parse("select",
|
115
|
-
:table => "Users",
|
116
|
-
:filter => filter)
|
117
|
-
assert_equal(['geo_in_rectangle(location,' +
|
118
|
-
'"35.73360x139.7394","62614x139.7714")',
|
119
|
-
'type == "たいやき"',
|
120
|
-
'type == "和菓子"',
|
121
|
-
'keyword @ "たいやき"',
|
122
|
-
'keyword @ "白"',
|
123
|
-
'keyword @ "養殖"'],
|
124
|
-
select.conditions)
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_to_uri_format
|
128
|
-
filter = 'geo_in_rectangle(location,' +
|
129
|
-
'"35.73360x139.7394","62614x139.7714") && ' +
|
130
|
-
'((type == "たいやき" || type == "和菓子")) && ' +
|
131
|
-
'keyword @ "たいやき" &! keyword @ "白" &! keyword @ "養殖"'
|
132
|
-
select = parse("select",
|
133
|
-
:table => "Users",
|
134
|
-
:filter => filter)
|
135
|
-
assert_equal("/d/select.json?filter=geo_in_rectangle%28location%2C" +
|
136
|
-
"%2235.73360x139.7394%22%2C%2262614x139.7714%22%29+" +
|
137
|
-
"%26%26+%28%28type+" +
|
138
|
-
"%3D%3D+%22%E3%81%9F%E3%81%84%E3%82%84%E3%81%8D%22+" +
|
139
|
-
"%7C%7C+type+%3D%3D+" +
|
140
|
-
"%22%E5%92%8C%E8%8F%93%E5%AD%90%22%29%29+" +
|
141
|
-
"%26%26+keyword+%40+" +
|
142
|
-
"%22%E3%81%9F%E3%81%84%E3%82%84%E3%81%8D%22+%26%21+" +
|
143
|
-
"keyword+%40+%22%E7%99%BD%22+%26%21+" +
|
144
|
-
"keyword+%40+%22%E9%A4%8A%E6%AE%96%22&table=Users",
|
145
|
-
select.to_uri_format)
|
146
|
-
end
|
147
|
-
|
148
|
-
def test_to_command_format
|
149
|
-
filter = 'geo_in_rectangle(location,' +
|
150
|
-
'"35.73360x139.7394","62614x139.7714") && ' +
|
151
|
-
'((type == "たいやき" || type == "和菓子")) && ' +
|
152
|
-
'keyword @ "たいやき" &! keyword @ "白" &! keyword @ "養殖"'
|
153
|
-
select = parse("select",
|
154
|
-
:table => "Users",
|
155
|
-
:filter => filter)
|
156
|
-
assert_equal("select " +
|
157
|
-
"--filter " +
|
158
|
-
"\"geo_in_rectangle(location," +
|
159
|
-
"\\\"35.73360x139.7394\\\",\\\"62614x139.7714\\\") && " +
|
160
|
-
"((type == \\\"たいやき\\\" || " +
|
161
|
-
"type == \\\"和菓子\\\")) && " +
|
162
|
-
"keyword @ \\\"たいやき\\\" &! keyword @ \\\"白\\\" &! " +
|
163
|
-
"keyword @ \\\"養殖\\\"\" " +
|
164
|
-
"--output_type \"json\" --table \"Users\"",
|
165
|
-
select.to_command_format)
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
class HTTPSelectCommandParseTest < Test::Unit::TestCase
|
170
|
-
include SelectCommandParseTests
|
171
|
-
include SelectCommandParseFilterTests
|
172
|
-
include HTTPCommandParseTestUtils
|
173
|
-
|
174
|
-
def test_uri_format?
|
175
|
-
command = parse("status")
|
176
|
-
assert_predicate(command, :uri_format?)
|
177
|
-
end
|
178
|
-
|
179
|
-
def test_command_format?
|
180
|
-
command = parse("status")
|
181
|
-
assert_not_predicate(command, :command_format?)
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
class CommandLineSelecCommandParseTest < Test::Unit::TestCase
|
186
|
-
include SelectCommandParseTests
|
187
|
-
include SelectCommandParseFilterTests
|
188
|
-
include CommandLineCommandParseTestUtils
|
189
|
-
|
190
|
-
def test_uri_format?
|
191
|
-
command = parse("status")
|
192
|
-
assert_not_predicate(command, :uri_format?)
|
193
|
-
end
|
194
|
-
|
195
|
-
def test_command_format?
|
196
|
-
command = parse("status")
|
197
|
-
assert_predicate(command, :command_format?)
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
class StatisticOperationParseTest < Test::Unit::TestCase
|
202
|
-
def test_context
|
203
|
-
operations = statistics.first.operations.collect do |operation|
|
204
|
-
[operation[:name], operation[:context]]
|
205
|
-
end
|
206
|
-
expected = [
|
207
|
-
["filter", "local_name @ \"gsub\""],
|
208
|
-
["filter", "description @ \"string\""],
|
209
|
-
["select", nil],
|
210
|
-
["sort", "_score"],
|
211
|
-
["output", "_key"],
|
212
|
-
["drilldown", "name"],
|
213
|
-
["drilldown", "class"],
|
214
|
-
]
|
215
|
-
assert_equal(expected, operations)
|
216
|
-
end
|
217
|
-
|
218
|
-
def test_n_records
|
219
|
-
operations = statistics.first.operations.collect do |operation|
|
220
|
-
[operation[:name], operation[:n_records]]
|
221
|
-
end
|
222
|
-
expected = [
|
223
|
-
["filter", 15],
|
224
|
-
["filter", 13],
|
225
|
-
["select", 13],
|
226
|
-
["sort", 10],
|
227
|
-
["output", 10],
|
228
|
-
["drilldown", 3],
|
229
|
-
["drilldown", 2],
|
230
|
-
]
|
231
|
-
assert_equal(expected, operations)
|
232
|
-
end
|
233
|
-
|
234
|
-
private
|
235
|
-
def log
|
236
|
-
<<-EOL
|
237
|
-
2011-06-02 16:27:04.731685|5091e5c0|>/d/select.join?table=Entries&filter=local_name+%40+%22gsub%22+%26%26+description+%40+%22string%22&sortby=_score&output_columns=_key&drilldown=name,class
|
238
|
-
2011-06-02 16:27:04.733539|5091e5c0|:000000001849451 filter(15)
|
239
|
-
2011-06-02 16:27:04.734978|5091e5c0|:000000003293459 filter(13)
|
240
|
-
2011-06-02 16:27:04.735012|5091e5c0|:000000003327415 select(13)
|
241
|
-
2011-06-02 16:27:04.735096|5091e5c0|:000000003411824 sort(10)
|
242
|
-
2011-06-02 16:27:04.735232|5091e5c0|:000000003547265 output(10)
|
243
|
-
2011-06-02 16:27:04.735606|5091e5c0|:000000003921419 drilldown(3)
|
244
|
-
2011-06-02 16:27:04.735762|5091e5c0|:000000004077552 drilldown(2)
|
245
|
-
2011-06-02 16:27:04.735808|5091e5c0|<000000004123726 rc=0
|
246
|
-
EOL
|
247
|
-
end
|
248
|
-
|
249
|
-
def statistics
|
250
|
-
statistics = []
|
251
|
-
parser = Groonga::QueryLog::Parser.new
|
252
|
-
parser.parse(StringIO.new(log)) do |statistic|
|
253
|
-
statistics << statistic
|
254
|
-
end
|
255
|
-
statistics
|
256
|
-
end
|
257
|
-
end
|
258
|
-
end
|
data/test/test-record.rb
DELETED
@@ -1,569 +0,0 @@
|
|
1
|
-
# Copyright (C) 2009-2012 Kouhei Sutou <kou@clear-code.com>
|
2
|
-
#
|
3
|
-
# This library is free software; you can redistribute it and/or
|
4
|
-
# modify it under the terms of the GNU Lesser General Public
|
5
|
-
# License version 2.1 as published by the Free Software Foundation.
|
6
|
-
#
|
7
|
-
# This library is distributed in the hope that it will be useful,
|
8
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
9
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
10
|
-
# Lesser General Public License for more details.
|
11
|
-
#
|
12
|
-
# You should have received a copy of the GNU Lesser General Public
|
13
|
-
# License along with this library; if not, write to the Free Software
|
14
|
-
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
15
|
-
|
16
|
-
class RecordTest < Test::Unit::TestCase
|
17
|
-
include GroongaTestUtils
|
18
|
-
|
19
|
-
def setup
|
20
|
-
setup_database
|
21
|
-
|
22
|
-
setup_addresses_table
|
23
|
-
setup_users_table
|
24
|
-
setup_bookmarks_table
|
25
|
-
setup_indexes
|
26
|
-
end
|
27
|
-
|
28
|
-
def setup_addresses_table
|
29
|
-
@addresses = Groonga::Array.create(:name => "Addresses")
|
30
|
-
@addresses.define_column("mail", "ShortText")
|
31
|
-
end
|
32
|
-
|
33
|
-
def setup_users_table
|
34
|
-
@users = Groonga::Hash.create(:name => "Users",
|
35
|
-
:key_type => "ShortText")
|
36
|
-
@users.define_column("addresses", @addresses, :type => "vector")
|
37
|
-
end
|
38
|
-
|
39
|
-
def setup_bookmarks_table
|
40
|
-
@bookmarks = Groonga::Array.create(:name => "Bookmarks",
|
41
|
-
:value_type => "Int32")
|
42
|
-
@bookmarks.define_column("uri", "ShortText")
|
43
|
-
@bookmarks.define_column("rate", "Int32")
|
44
|
-
@bookmarks.define_column("comment", "Text")
|
45
|
-
@bookmarks.define_column("content", "LongText")
|
46
|
-
@bookmarks.define_column("user", @users)
|
47
|
-
end
|
48
|
-
|
49
|
-
def setup_indexes
|
50
|
-
@bookmarks_index = Groonga::PatriciaTrie.create(:name => "BookmarksIndex")
|
51
|
-
@bookmarks_index.default_tokenizer = "TokenBigram"
|
52
|
-
|
53
|
-
@bookmarks_content_index =
|
54
|
-
@bookmarks_index.define_index_column("content", @bookmarks,
|
55
|
-
:with_section => true,
|
56
|
-
:with_weight => true,
|
57
|
-
:with_position => true,
|
58
|
-
:source => "Bookmarks.content")
|
59
|
-
@bookmarks_index.define_index_column("uri", @bookmarks,
|
60
|
-
:with_position => true,
|
61
|
-
:source => "Bookmarks.uri")
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_column_accessor
|
65
|
-
groonga = @bookmarks.add
|
66
|
-
|
67
|
-
groonga["uri"] = "http://groonga.org/"
|
68
|
-
assert_equal("http://groonga.org/", groonga["uri"])
|
69
|
-
|
70
|
-
groonga["comment"] = "fulltext search engine"
|
71
|
-
assert_equal("fulltext search engine", groonga["comment"])
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_have_column?
|
75
|
-
groonga = @bookmarks.add
|
76
|
-
assert_true(groonga.have_column?(:uri))
|
77
|
-
assert_false(groonga.have_column?(:nonexistent))
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_have_column_id
|
81
|
-
groonga = @bookmarks.add
|
82
|
-
assert_true(groonga.have_column?(:_id))
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_have_column_key_hash
|
86
|
-
mori = @users.add("mori")
|
87
|
-
assert_true(mori.have_column?(:_key))
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_have_column_key_array_with_value_type
|
91
|
-
groonga = @bookmarks.add
|
92
|
-
assert_true(groonga.have_column?(:_key))
|
93
|
-
end
|
94
|
-
|
95
|
-
def test_have_column_key_array_without_value_type
|
96
|
-
groonga_ml = @addresses.add
|
97
|
-
assert_false(groonga_ml.have_column?(:_key))
|
98
|
-
end
|
99
|
-
|
100
|
-
def test_have_column_nsubrecs_existent
|
101
|
-
@users.add("mori")
|
102
|
-
bookmarks = @users.select do |record|
|
103
|
-
record.key == "mori"
|
104
|
-
end
|
105
|
-
assert_true(bookmarks.to_a.first.have_column?(:_nsubrecs))
|
106
|
-
end
|
107
|
-
|
108
|
-
def test_have_column_nsubrecs_nonexistent
|
109
|
-
groonga = @bookmarks.add
|
110
|
-
assert_false(groonga.have_column?(:_nsubrecs))
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_get_nonexistent_column
|
114
|
-
groonga = @bookmarks.add
|
115
|
-
assert_raise(Groonga::NoSuchColumn) do
|
116
|
-
groonga["nonexistent"]
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_set_nonexistent_column
|
121
|
-
groonga = @bookmarks.add
|
122
|
-
assert_raise(Groonga::NoSuchColumn) do
|
123
|
-
groonga["nonexistent"] = "value"
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_set_object_id
|
128
|
-
groonga = @bookmarks.add
|
129
|
-
daijiro = @users.add("daijiro")
|
130
|
-
assert_nil(groonga["user"])
|
131
|
-
groonga["user"] = daijiro
|
132
|
-
assert_equal(daijiro, groonga["user"])
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_set_nil
|
136
|
-
groonga = @bookmarks.add(:content => "groonga")
|
137
|
-
assert_equal("groonga", groonga["content"])
|
138
|
-
groonga["content"] = nil
|
139
|
-
assert_nil(groonga["content"])
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_set_empty_string
|
143
|
-
groonga = @bookmarks.add(:content => "groonga")
|
144
|
-
assert_equal("groonga", groonga["content"])
|
145
|
-
groonga["content"] = ""
|
146
|
-
assert_nil(groonga["content"])
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_set_nil_reference
|
150
|
-
groonga = @bookmarks.add(:user => "daijiro",
|
151
|
-
:uri => "http://groonga.org/")
|
152
|
-
groonga.user = nil
|
153
|
-
assert_nil(groonga.user)
|
154
|
-
end
|
155
|
-
|
156
|
-
def test_set_empty_key_reference
|
157
|
-
groonga = @bookmarks.add(:user => "daijiro",
|
158
|
-
:uri => "http://groonga.org/")
|
159
|
-
assert_equal(@users["daijiro"], groonga.user)
|
160
|
-
groonga["user"] = ""
|
161
|
-
assert_nil(groonga.user)
|
162
|
-
end
|
163
|
-
|
164
|
-
def test_set_string_to_integer_column
|
165
|
-
groonga = @bookmarks.add(:content => "groonga")
|
166
|
-
groonga.rate = "100"
|
167
|
-
assert_equal(100, groonga.rate)
|
168
|
-
end
|
169
|
-
|
170
|
-
def test_delete
|
171
|
-
bookmark_records = []
|
172
|
-
bookmark_records << @bookmarks.add
|
173
|
-
bookmark_records << @bookmarks.add
|
174
|
-
bookmark_records << @bookmarks.add
|
175
|
-
|
176
|
-
assert_equal(3, @bookmarks.size)
|
177
|
-
bookmark_records[1].delete
|
178
|
-
assert_equal(2, @bookmarks.size)
|
179
|
-
end
|
180
|
-
|
181
|
-
def test_key
|
182
|
-
documents = Groonga::PatriciaTrie.create(:name => "Documents",
|
183
|
-
:key_type => "ShortText")
|
184
|
-
reference = documents.add("reference")
|
185
|
-
assert_equal("reference", reference.key)
|
186
|
-
end
|
187
|
-
|
188
|
-
def test_value
|
189
|
-
bookmark = @bookmarks.add
|
190
|
-
assert_equal(0, bookmark.value)
|
191
|
-
bookmark.value = 100
|
192
|
-
assert_equal(100, bookmark.value)
|
193
|
-
end
|
194
|
-
|
195
|
-
def test_reference_column?
|
196
|
-
bookmark = @bookmarks.add
|
197
|
-
assert_false(bookmark.reference_column?("uri"))
|
198
|
-
assert_true(bookmark.reference_column?("user"))
|
199
|
-
end
|
200
|
-
|
201
|
-
def test_index_column?
|
202
|
-
bookmark = @bookmarks.add
|
203
|
-
assert_false(bookmark.index_column?("uri"))
|
204
|
-
index = @bookmarks_index.add("token")
|
205
|
-
assert_true(index.index_column?("content"))
|
206
|
-
end
|
207
|
-
|
208
|
-
def test_vector_column?
|
209
|
-
bookmark = @bookmarks.add
|
210
|
-
assert_false(bookmark.vector_column?("uri"))
|
211
|
-
morita = @users.add("morita")
|
212
|
-
assert_true(morita.vector_column?("addresses"))
|
213
|
-
end
|
214
|
-
|
215
|
-
def test_scalar_column?
|
216
|
-
bookmark = @bookmarks.add
|
217
|
-
assert_true(bookmark.scalar_column?("uri"))
|
218
|
-
morita = @users.add("morita")
|
219
|
-
assert_false(morita.scalar_column?("addresses"))
|
220
|
-
end
|
221
|
-
|
222
|
-
def test_score
|
223
|
-
groonga = @bookmarks.add
|
224
|
-
groonga["content"] = "full text search search search engine."
|
225
|
-
|
226
|
-
google = @bookmarks.add
|
227
|
-
google["content"] = "Web search engine."
|
228
|
-
|
229
|
-
results = @bookmarks_content_index.search("search")
|
230
|
-
assert_equal([[groonga.id, 3], [google.id, 1]],
|
231
|
-
results.collect do |record|
|
232
|
-
[record.id, record.score]
|
233
|
-
end)
|
234
|
-
end
|
235
|
-
|
236
|
-
def test_score=
|
237
|
-
groonga = @bookmarks.add
|
238
|
-
groonga["content"] = "full text search search search engine."
|
239
|
-
|
240
|
-
google = @bookmarks.add
|
241
|
-
google["content"] = "Web search engine."
|
242
|
-
|
243
|
-
results = @bookmarks_content_index.search("search")
|
244
|
-
results.each do |record|
|
245
|
-
record.score *= 10
|
246
|
-
end
|
247
|
-
assert_equal([[groonga.id, 30], [google.id, 10]],
|
248
|
-
results.collect do |record|
|
249
|
-
[record.id, record.score]
|
250
|
-
end)
|
251
|
-
end
|
252
|
-
|
253
|
-
def test_increment!
|
254
|
-
groonga = @bookmarks.add
|
255
|
-
assert_equal(0, groonga["rate"])
|
256
|
-
groonga.increment!("rate")
|
257
|
-
assert_equal(1, groonga["rate"])
|
258
|
-
groonga.increment!("rate", 2)
|
259
|
-
assert_equal(3, groonga["rate"])
|
260
|
-
groonga.increment!("rate", -2)
|
261
|
-
assert_equal(1, groonga["rate"])
|
262
|
-
end
|
263
|
-
|
264
|
-
def test_decrement!
|
265
|
-
groonga = @bookmarks.add
|
266
|
-
assert_equal(0, groonga["rate"])
|
267
|
-
groonga.decrement!("rate")
|
268
|
-
assert_equal(-1, groonga["rate"])
|
269
|
-
groonga.decrement!("rate", 2)
|
270
|
-
assert_equal(-3, groonga["rate"])
|
271
|
-
groonga.decrement!("rate", -2)
|
272
|
-
assert_equal(-1, groonga["rate"])
|
273
|
-
end
|
274
|
-
|
275
|
-
def test_lock
|
276
|
-
groonga = @bookmarks.add
|
277
|
-
|
278
|
-
assert_not_predicate(groonga, :locked?)
|
279
|
-
groonga.lock
|
280
|
-
assert_predicate(groonga, :locked?)
|
281
|
-
groonga.unlock
|
282
|
-
assert_not_predicate(groonga, :locked?)
|
283
|
-
end
|
284
|
-
|
285
|
-
def test_lock_failed
|
286
|
-
groonga = @bookmarks.add
|
287
|
-
|
288
|
-
groonga.lock
|
289
|
-
assert_raise(Groonga::ResourceDeadlockAvoided) do
|
290
|
-
groonga.lock
|
291
|
-
end
|
292
|
-
end
|
293
|
-
|
294
|
-
def test_lock_block
|
295
|
-
groonga = @bookmarks.add
|
296
|
-
|
297
|
-
assert_not_predicate(groonga, :locked?)
|
298
|
-
groonga.lock do
|
299
|
-
assert_predicate(groonga, :locked?)
|
300
|
-
end
|
301
|
-
assert_not_predicate(groonga, :locked?)
|
302
|
-
end
|
303
|
-
|
304
|
-
def test_clear_lock
|
305
|
-
groonga = @bookmarks.add
|
306
|
-
|
307
|
-
assert_not_predicate(groonga, :locked?)
|
308
|
-
groonga.lock
|
309
|
-
assert_predicate(groonga, :locked?)
|
310
|
-
groonga.clear_lock
|
311
|
-
assert_not_predicate(groonga, :locked?)
|
312
|
-
end
|
313
|
-
|
314
|
-
def test_attributes
|
315
|
-
values = {
|
316
|
-
"uri" => "http://groonga.org/",
|
317
|
-
"rate" => 5,
|
318
|
-
"comment" => "Grate!"
|
319
|
-
}
|
320
|
-
groonga = @bookmarks.add(values)
|
321
|
-
assert_equal(values.merge("_id" => groonga.id,
|
322
|
-
"content" => nil,
|
323
|
-
"user" => nil),
|
324
|
-
groonga.attributes)
|
325
|
-
end
|
326
|
-
|
327
|
-
def test_recursive_attributes
|
328
|
-
@bookmarks.define_column("next", @bookmarks)
|
329
|
-
|
330
|
-
top_page_record = @bookmarks.add(top_page)
|
331
|
-
doc_page_record = @bookmarks.add(doc_page)
|
332
|
-
|
333
|
-
top_page_record["next"] = doc_page_record
|
334
|
-
doc_page_record["next"] = top_page_record
|
335
|
-
|
336
|
-
expected = {
|
337
|
-
"_id" => 1,
|
338
|
-
"user" => nil,
|
339
|
-
"uri" => "http://groonga.org/",
|
340
|
-
"rate" => 5,
|
341
|
-
"next" => {
|
342
|
-
"_id" => 2,
|
343
|
-
"user" => nil,
|
344
|
-
"uri" => "http://groonga.org/document.html",
|
345
|
-
"rate" => 8,
|
346
|
-
"content" => nil,
|
347
|
-
"comment" => "Informative"
|
348
|
-
},
|
349
|
-
"content" => nil,
|
350
|
-
"comment" => "Great!"
|
351
|
-
}
|
352
|
-
expected["next"]["next"] = expected
|
353
|
-
|
354
|
-
assert_equal(expected, top_page_record.attributes)
|
355
|
-
end
|
356
|
-
|
357
|
-
def test_duplicate_records_attributes
|
358
|
-
@bookmarks.define_column("next1", @bookmarks)
|
359
|
-
@bookmarks.define_column("next2", @bookmarks)
|
360
|
-
|
361
|
-
top_page_record = @bookmarks.add(top_page)
|
362
|
-
doc_page_record = @bookmarks.add(doc_page)
|
363
|
-
|
364
|
-
top_page_record["next1"] = doc_page_record
|
365
|
-
top_page_record["next2"] = doc_page_record
|
366
|
-
doc_page_record["next1"] = top_page_record
|
367
|
-
|
368
|
-
doc_page_attributes = {
|
369
|
-
"_id" => 2,
|
370
|
-
"user" => nil,
|
371
|
-
"uri" => "http://groonga.org/document.html",
|
372
|
-
"rate" => 8,
|
373
|
-
"content" => nil,
|
374
|
-
"comment" => "Informative",
|
375
|
-
"next2" => nil
|
376
|
-
}
|
377
|
-
top_page_attributes = {
|
378
|
-
"_id" => 1,
|
379
|
-
"user" => nil,
|
380
|
-
"uri" => "http://groonga.org/",
|
381
|
-
"rate" => 5,
|
382
|
-
"next1" => doc_page_attributes,
|
383
|
-
"next2" => doc_page_attributes,
|
384
|
-
"content" => nil,
|
385
|
-
"comment" => "Great!"
|
386
|
-
}
|
387
|
-
doc_page_attributes["next1"] = top_page_attributes
|
388
|
-
|
389
|
-
actual_records = top_page_record.attributes
|
390
|
-
assert_equal(top_page_attributes, actual_records)
|
391
|
-
assert_equal(actual_records["next1"].object_id,
|
392
|
-
actual_records["next2"].object_id)
|
393
|
-
end
|
394
|
-
|
395
|
-
def test_select_result_attributes
|
396
|
-
@bookmarks.add(top_page)
|
397
|
-
select_result = @bookmarks.select
|
398
|
-
select_result_result = select_result.first
|
399
|
-
|
400
|
-
expected_attributes = {
|
401
|
-
"_id" => 1,
|
402
|
-
"_key" => {
|
403
|
-
"comment" => "Great!",
|
404
|
-
"content" => nil,
|
405
|
-
"_id" => 1,
|
406
|
-
"rate" => 5,
|
407
|
-
"uri" => "http://groonga.org/",
|
408
|
-
"user" => nil
|
409
|
-
},
|
410
|
-
"_nsubrecs" => 1,
|
411
|
-
"_score" => 1,
|
412
|
-
}
|
413
|
-
|
414
|
-
assert_equal(expected_attributes, select_result_result.attributes)
|
415
|
-
end
|
416
|
-
|
417
|
-
def test_self_referencing_attributes
|
418
|
-
@bookmarks.define_column("next", @bookmarks)
|
419
|
-
|
420
|
-
top_page_record = @bookmarks.add(top_page)
|
421
|
-
top_page_record["next"] = top_page_record
|
422
|
-
|
423
|
-
expected = {
|
424
|
-
"_id" => 1,
|
425
|
-
"user" => nil,
|
426
|
-
"uri" => "http://groonga.org/",
|
427
|
-
"rate" => 5,
|
428
|
-
"content" => nil,
|
429
|
-
"comment" => "Great!"
|
430
|
-
}
|
431
|
-
expected["next"] = expected
|
432
|
-
|
433
|
-
assert_equal(expected, top_page_record.attributes)
|
434
|
-
end
|
435
|
-
|
436
|
-
def test_vector_attributes
|
437
|
-
@bookmarks.define_column("related_bookmarks", @bookmarks, :type => :vector)
|
438
|
-
|
439
|
-
top_page_record = @bookmarks.add(top_page)
|
440
|
-
doc_page_record = @bookmarks.add(doc_page)
|
441
|
-
top_page_record["related_bookmarks"] = [doc_page_record]
|
442
|
-
|
443
|
-
expected = {
|
444
|
-
"_id" => 1,
|
445
|
-
"user" => nil,
|
446
|
-
"uri" => "http://groonga.org/",
|
447
|
-
"rate" => 5,
|
448
|
-
"related_bookmarks" => [
|
449
|
-
{
|
450
|
-
"_id" => 2,
|
451
|
-
"comment" => "Informative",
|
452
|
-
"content" => nil,
|
453
|
-
"rate" => 8,
|
454
|
-
"related_bookmarks" => [],
|
455
|
-
"uri" => "http://groonga.org/document.html",
|
456
|
-
"user" => nil,
|
457
|
-
}
|
458
|
-
],
|
459
|
-
"content" => nil,
|
460
|
-
"comment" => "Great!"
|
461
|
-
}
|
462
|
-
|
463
|
-
assert_equal(expected, top_page_record.attributes)
|
464
|
-
end
|
465
|
-
|
466
|
-
def test_self_referencing_vector_attributes
|
467
|
-
@bookmarks.define_column("related_bookmarks", @bookmarks, :type => :vector)
|
468
|
-
|
469
|
-
top_page_record = @bookmarks.add(top_page)
|
470
|
-
doc_page_record = @bookmarks.add(doc_page)
|
471
|
-
top_page_record["related_bookmarks"] = [
|
472
|
-
top_page_record,
|
473
|
-
doc_page_record
|
474
|
-
]
|
475
|
-
|
476
|
-
top_page_attributes = {
|
477
|
-
"_id" => 1,
|
478
|
-
"user" => nil,
|
479
|
-
"uri" => "http://groonga.org/",
|
480
|
-
"rate" => 5,
|
481
|
-
"content" => nil,
|
482
|
-
"comment" => "Great!"
|
483
|
-
}
|
484
|
-
doc_page_attributes = {
|
485
|
-
"_id" => 2,
|
486
|
-
"comment" => "Informative",
|
487
|
-
"content" => nil,
|
488
|
-
"rate" => 8,
|
489
|
-
"related_bookmarks" => [],
|
490
|
-
"uri" => "http://groonga.org/document.html",
|
491
|
-
"user" => nil,
|
492
|
-
}
|
493
|
-
top_page_attributes["related_bookmarks"] = [
|
494
|
-
top_page_attributes,
|
495
|
-
doc_page_attributes
|
496
|
-
]
|
497
|
-
assert_equal(top_page_attributes, top_page_record.attributes)
|
498
|
-
end
|
499
|
-
|
500
|
-
def test_dynamic_accessor
|
501
|
-
groonga = @bookmarks.add
|
502
|
-
assert_equal([],
|
503
|
-
["uri", "uri="] - groonga.methods.collect {|name| name.to_s})
|
504
|
-
assert_equal([true, true],
|
505
|
-
[groonga.respond_to?(:uri),
|
506
|
-
groonga.respond_to?(:uri=)])
|
507
|
-
groonga.uri = "http://groonga.org/"
|
508
|
-
assert_equal("http://groonga.org/", groonga.uri)
|
509
|
-
end
|
510
|
-
|
511
|
-
def test_method_chain
|
512
|
-
morita = @users.add("morita")
|
513
|
-
groonga = @bookmarks.add(:user => morita, :uri => "http://groonga.org")
|
514
|
-
assert_equal("morita", groonga.user.key)
|
515
|
-
end
|
516
|
-
|
517
|
-
def test_support_sub_records
|
518
|
-
morita = @users.add("morita")
|
519
|
-
assert_not_predicate(morita, :support_sub_records?)
|
520
|
-
users = @users.select {|record| record.key == "morita"}
|
521
|
-
assert_predicate(users.to_a[0], :support_sub_records?)
|
522
|
-
end
|
523
|
-
|
524
|
-
def test_set_record_like_object
|
525
|
-
kou_at_clear_code = @addresses.add(:mail => "kou@clear-code.com")
|
526
|
-
record_like_class = Class.new do
|
527
|
-
attr_reader :record_raw_id
|
528
|
-
def initialize(record_raw_id)
|
529
|
-
@record_raw_id = record_raw_id
|
530
|
-
end
|
531
|
-
end
|
532
|
-
record_like_object = record_like_class.new(kou_at_clear_code.record_raw_id)
|
533
|
-
kou = @users.add("kou")
|
534
|
-
kou.addresses = [record_like_object]
|
535
|
-
end
|
536
|
-
|
537
|
-
def test_set_array_like_records
|
538
|
-
kou_at_clear_code = @addresses.add(:mail => "kou@clear-code.com")
|
539
|
-
array_like_class = Class.new do
|
540
|
-
def initialize(records)
|
541
|
-
@records = records
|
542
|
-
end
|
543
|
-
|
544
|
-
def to_ary
|
545
|
-
@records
|
546
|
-
end
|
547
|
-
end
|
548
|
-
array_like_object = array_like_class.new([kou_at_clear_code])
|
549
|
-
kou = @users.add("kou")
|
550
|
-
kou.addresses = array_like_object
|
551
|
-
end
|
552
|
-
|
553
|
-
private
|
554
|
-
def top_page
|
555
|
-
{
|
556
|
-
"uri" => "http://groonga.org/",
|
557
|
-
"rate" => 5,
|
558
|
-
"comment" => "Great!",
|
559
|
-
}
|
560
|
-
end
|
561
|
-
|
562
|
-
def doc_page
|
563
|
-
{
|
564
|
-
"uri" => "http://groonga.org/document.html",
|
565
|
-
"rate" => 8,
|
566
|
-
"comment" => "Informative"
|
567
|
-
}
|
568
|
-
end
|
569
|
-
end
|