groonga-client 0.5.2 → 0.5.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.
- checksums.yaml +4 -4
- data/bin/groonga-client +4 -4
- data/bin/groonga-client-index-recreate +23 -0
- data/doc/text/news.md +26 -0
- data/lib/groonga/client/command-line/groonga-client-index-recreate.rb +325 -0
- data/lib/groonga/client/command-line/groonga-client.rb +244 -0
- data/lib/groonga/client/response/column-list.rb +32 -3
- data/lib/groonga/client/response/schema.rb +28 -2
- data/lib/groonga/client/version.rb +1 -1
- data/test/command-line/test-index-recreate.rb +369 -0
- data/test/response/test-column-list.rb +134 -8
- data/test/response/test-schema.rb +189 -2
- metadata +9 -6
- data/lib/groonga/client/cli.rb +0 -233
- data/test/results/test-column-list.rb +0 -64
@@ -1,7 +1,5 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
#
|
3
1
|
# Copyright (C) 2013 Haruka Yoshihara <yoshihara@clear-code.com>
|
4
|
-
# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
|
2
|
+
# Copyright (C) 2013-2017 Kouhei Sutou <kou@clear-code.com>
|
5
3
|
#
|
6
4
|
# This library is free software; you can redistribute it and/or
|
7
5
|
# modify it under the terms of the GNU Lesser General Public
|
@@ -66,6 +64,37 @@ module Groonga
|
|
66
64
|
:domain,
|
67
65
|
:range,
|
68
66
|
:source)
|
67
|
+
# @return [::Array<String>]
|
68
|
+
# The flag names of the column.
|
69
|
+
#
|
70
|
+
# @since 0.5.3
|
71
|
+
def flags
|
72
|
+
(super || "").split("|")
|
73
|
+
end
|
74
|
+
|
75
|
+
# @return [Boolean]
|
76
|
+
# `true` if the column is a scalar column, `false` otherwise.
|
77
|
+
#
|
78
|
+
# @since 0.5.3
|
79
|
+
def scalar?
|
80
|
+
flags.include?("COLUMN_SCALAR")
|
81
|
+
end
|
82
|
+
|
83
|
+
# @return [Boolean]
|
84
|
+
# `true` if the column is a vector column, `false` otherwise.
|
85
|
+
#
|
86
|
+
# @since 0.5.3
|
87
|
+
def vector?
|
88
|
+
flags.include?("COLUMN_VECTOR")
|
89
|
+
end
|
90
|
+
|
91
|
+
# @return [Boolean]
|
92
|
+
# `true` if the column is an index column, `false` otherwise.
|
93
|
+
#
|
94
|
+
# @since 0.5.3
|
95
|
+
def index?
|
96
|
+
flags.include?("COLUMN_INDEX")
|
97
|
+
end
|
69
98
|
end
|
70
99
|
end
|
71
100
|
end
|
@@ -96,8 +96,25 @@ module Groonga
|
|
96
96
|
@tables
|
97
97
|
end
|
98
98
|
|
99
|
-
|
100
|
-
|
99
|
+
# @param name [String] The object name to be retrieved.
|
100
|
+
#
|
101
|
+
# @return [Plugin, Type, Tokenizer, Normalizer, TokenFilter, Table, Column]
|
102
|
+
# The object named `name`.
|
103
|
+
#
|
104
|
+
# @since 0.5.3
|
105
|
+
def [](name)
|
106
|
+
name = name.to_s if name.is_a?(Symbol)
|
107
|
+
if name.include?(".")
|
108
|
+
table_name, column_name = name.split(".", 2)
|
109
|
+
tables[table_name].columns[column_name]
|
110
|
+
else
|
111
|
+
tables[name] ||
|
112
|
+
types[name] ||
|
113
|
+
tokenizers[name] ||
|
114
|
+
normalizers[name] ||
|
115
|
+
token_filters[name] ||
|
116
|
+
plugins[name]
|
117
|
+
end
|
101
118
|
end
|
102
119
|
|
103
120
|
module HashValueConverter
|
@@ -147,6 +164,11 @@ module Groonga
|
|
147
164
|
include Hashie::Extensions::MethodAccess
|
148
165
|
end
|
149
166
|
|
167
|
+
class Command < ::Hash
|
168
|
+
include Hashie::Extensions::MergeInitializer
|
169
|
+
include Hashie::Extensions::MethodAccess
|
170
|
+
end
|
171
|
+
|
150
172
|
class Index < ::Hash
|
151
173
|
include Hashie::Extensions::MethodAccess
|
152
174
|
|
@@ -204,6 +226,8 @@ module Groonga
|
|
204
226
|
when :value_type
|
205
227
|
value = ValueType.new(value) unless value.nil?
|
206
228
|
super(key, value)
|
229
|
+
when :command
|
230
|
+
super(key, Command.new(value))
|
207
231
|
else
|
208
232
|
super
|
209
233
|
end
|
@@ -243,6 +267,8 @@ module Groonga
|
|
243
267
|
super(key, coerce_columns(value))
|
244
268
|
when :indexes
|
245
269
|
super(key, coerce_indexes(value))
|
270
|
+
when :command
|
271
|
+
super(key, Command.new(value))
|
246
272
|
else
|
247
273
|
super
|
248
274
|
end
|
@@ -0,0 +1,369 @@
|
|
1
|
+
# Copyright (C) 2017 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 as published by the Free Software Foundation; either
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
|
+
|
17
|
+
require "time"
|
18
|
+
|
19
|
+
require "groonga/command/parser"
|
20
|
+
|
21
|
+
require "groonga/client"
|
22
|
+
require "groonga/client/test-helper"
|
23
|
+
require "groonga/client/command-line/groonga-client-index-recreate"
|
24
|
+
|
25
|
+
class TestCommandLineIndexRecreate < Test::Unit::TestCase
|
26
|
+
include Groonga::Client::TestHelper
|
27
|
+
|
28
|
+
def setup
|
29
|
+
@now = Time.parse("2017-10-25T17:22:00+0900")
|
30
|
+
stub(Time).now {@now}
|
31
|
+
end
|
32
|
+
|
33
|
+
def groonga_url
|
34
|
+
@groonga_server_runner.url.to_s
|
35
|
+
end
|
36
|
+
|
37
|
+
def open_client
|
38
|
+
Groonga::Client.open(:url => groonga_url) do |client|
|
39
|
+
yield(client)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def restore(commands)
|
44
|
+
open_client do |client|
|
45
|
+
values = nil
|
46
|
+
Groonga::Command::Parser.parse(commands) do |event, *args|
|
47
|
+
case event
|
48
|
+
when :on_command
|
49
|
+
command, = args
|
50
|
+
response = client.execute(command)
|
51
|
+
unless response.success?
|
52
|
+
raise Groonga::Client::Request::ErrorResponse.new(response)
|
53
|
+
end
|
54
|
+
when :on_load_start
|
55
|
+
command, = args
|
56
|
+
values = []
|
57
|
+
when :on_load_columns
|
58
|
+
command, columns = args
|
59
|
+
command[:columns] ||= columns.join(",")
|
60
|
+
when :on_load_value
|
61
|
+
command, value = args
|
62
|
+
values << value
|
63
|
+
when :on_load_complete
|
64
|
+
command, = args
|
65
|
+
command[:values] ||= JSON.generate(values)
|
66
|
+
response = client.execute(command)
|
67
|
+
unless response.success?
|
68
|
+
raise Groonga::Client::Request::ErrorResponse.new(response)
|
69
|
+
end
|
70
|
+
else
|
71
|
+
p [:unhandled_event, event, *args]
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def dump
|
78
|
+
open_client do |client|
|
79
|
+
client.dump.body
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def index_recreate(*arguments)
|
84
|
+
command_line = Groonga::Client::CommandLine::GroongaClientIndexRecreate.new
|
85
|
+
begin
|
86
|
+
stdout, $stdout = $stdout, StringIO.new
|
87
|
+
stderr, $stderr = $stderr, StringIO.new
|
88
|
+
[
|
89
|
+
command_line.run(["--url", groonga_url, *arguments]),
|
90
|
+
$stdout.string,
|
91
|
+
$stderr.string,
|
92
|
+
]
|
93
|
+
ensure
|
94
|
+
$stdout, $stderr = stdout, stderr
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_no_alias_column
|
99
|
+
index_recreate
|
100
|
+
assert_equal(<<-DUMP.chomp, dump)
|
101
|
+
config_set alias.column Aliases.real_name
|
102
|
+
|
103
|
+
table_create Aliases TABLE_HASH_KEY ShortText
|
104
|
+
column_create Aliases real_name COLUMN_SCALAR ShortText
|
105
|
+
DUMP
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_real_index
|
109
|
+
restore(<<-COMMANDS)
|
110
|
+
table_create Memos TABLE_HASH_KEY ShortText
|
111
|
+
column_create Memos content COLUMN_SCALAR Text
|
112
|
+
|
113
|
+
table_create Terms TABLE_PAT_KEY ShortText \
|
114
|
+
--normalizer NormalizerAuto \
|
115
|
+
--default_tokenizer TokenBigram
|
116
|
+
column_create Terms memos_content \
|
117
|
+
COLUMN_INDEX|WITH_POSITION \
|
118
|
+
Memos content
|
119
|
+
COMMANDS
|
120
|
+
|
121
|
+
assert_equal([true, "", ""],
|
122
|
+
index_recreate("Terms.memos_content"))
|
123
|
+
|
124
|
+
assert_equal(<<-DUMP.chomp, dump)
|
125
|
+
config_set alias.column Aliases.real_name
|
126
|
+
|
127
|
+
table_create Aliases TABLE_HASH_KEY ShortText
|
128
|
+
column_create Aliases real_name COLUMN_SCALAR ShortText
|
129
|
+
|
130
|
+
table_create Memos TABLE_HASH_KEY ShortText
|
131
|
+
column_create Memos content COLUMN_SCALAR Text
|
132
|
+
|
133
|
+
table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
|
134
|
+
|
135
|
+
load --table Aliases
|
136
|
+
[
|
137
|
+
["_key","real_name"],
|
138
|
+
["Terms.memos_content","Terms.memos_content_20171025"]
|
139
|
+
]
|
140
|
+
|
141
|
+
column_create Terms memos_content_20171025 COLUMN_INDEX|WITH_POSITION Memos content
|
142
|
+
DUMP
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_old_index
|
146
|
+
restore(<<-COMMANDS)
|
147
|
+
config_set alias.column CustomAliases.name
|
148
|
+
|
149
|
+
table_create CustomAliases TABLE_HASH_KEY ShortText
|
150
|
+
column_create CustomAliases name COLUMN_SCALAR ShortText
|
151
|
+
|
152
|
+
table_create Memos TABLE_HASH_KEY ShortText
|
153
|
+
column_create Memos content COLUMN_SCALAR Text
|
154
|
+
|
155
|
+
table_create Terms TABLE_PAT_KEY ShortText \
|
156
|
+
--normalizer NormalizerAuto \
|
157
|
+
--default_tokenizer TokenBigram
|
158
|
+
column_create Terms memos_content_20171024 \
|
159
|
+
COLUMN_INDEX|WITH_POSITION \
|
160
|
+
Memos content
|
161
|
+
|
162
|
+
load --table CustomAliases
|
163
|
+
[
|
164
|
+
["_key","name"],
|
165
|
+
["Terms.memos_content","Terms.memos_content_20171024"]
|
166
|
+
]
|
167
|
+
COMMANDS
|
168
|
+
|
169
|
+
assert_equal([true, "", ""],
|
170
|
+
index_recreate("Terms.memos_content"))
|
171
|
+
|
172
|
+
assert_equal(<<-DUMP.chomp, dump)
|
173
|
+
config_set alias.column CustomAliases.name
|
174
|
+
|
175
|
+
table_create CustomAliases TABLE_HASH_KEY ShortText
|
176
|
+
column_create CustomAliases name COLUMN_SCALAR ShortText
|
177
|
+
|
178
|
+
table_create Memos TABLE_HASH_KEY ShortText
|
179
|
+
column_create Memos content COLUMN_SCALAR Text
|
180
|
+
|
181
|
+
table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
|
182
|
+
|
183
|
+
load --table CustomAliases
|
184
|
+
[
|
185
|
+
["_key","name"],
|
186
|
+
["Terms.memos_content","Terms.memos_content_20171025"]
|
187
|
+
]
|
188
|
+
|
189
|
+
column_create Terms memos_content_20171024 COLUMN_INDEX|WITH_POSITION Memos content
|
190
|
+
column_create Terms memos_content_20171025 COLUMN_INDEX|WITH_POSITION Memos content
|
191
|
+
DUMP
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_old_indexes
|
195
|
+
restore(<<-COMMANDS)
|
196
|
+
config_set alias.column CustomAliases.name
|
197
|
+
|
198
|
+
table_create CustomAliases TABLE_HASH_KEY ShortText
|
199
|
+
column_create CustomAliases name COLUMN_SCALAR ShortText
|
200
|
+
|
201
|
+
table_create Memos TABLE_HASH_KEY ShortText
|
202
|
+
column_create Memos content COLUMN_SCALAR Text
|
203
|
+
|
204
|
+
table_create Terms TABLE_PAT_KEY ShortText \
|
205
|
+
--normalizer NormalizerAuto \
|
206
|
+
--default_tokenizer TokenBigram
|
207
|
+
column_create Terms memos_content_20171022 \
|
208
|
+
COLUMN_INDEX|WITH_POSITION \
|
209
|
+
Memos content
|
210
|
+
column_create Terms memos_content_20171023 \
|
211
|
+
COLUMN_INDEX|WITH_POSITION \
|
212
|
+
Memos content
|
213
|
+
column_create Terms memos_content_20171024 \
|
214
|
+
COLUMN_INDEX|WITH_POSITION \
|
215
|
+
Memos content
|
216
|
+
|
217
|
+
load --table CustomAliases
|
218
|
+
[
|
219
|
+
["_key","name"],
|
220
|
+
["Terms.memos_content","Terms.memos_content_20171024"]
|
221
|
+
]
|
222
|
+
COMMANDS
|
223
|
+
|
224
|
+
assert_equal([true, "", ""],
|
225
|
+
index_recreate("Terms.memos_content"))
|
226
|
+
|
227
|
+
assert_equal(<<-DUMP.chomp, dump)
|
228
|
+
config_set alias.column CustomAliases.name
|
229
|
+
|
230
|
+
table_create CustomAliases TABLE_HASH_KEY ShortText
|
231
|
+
column_create CustomAliases name COLUMN_SCALAR ShortText
|
232
|
+
|
233
|
+
table_create Memos TABLE_HASH_KEY ShortText
|
234
|
+
column_create Memos content COLUMN_SCALAR Text
|
235
|
+
|
236
|
+
table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
|
237
|
+
|
238
|
+
load --table CustomAliases
|
239
|
+
[
|
240
|
+
["_key","name"],
|
241
|
+
["Terms.memos_content","Terms.memos_content_20171025"]
|
242
|
+
]
|
243
|
+
|
244
|
+
column_create Terms memos_content_20171024 COLUMN_INDEX|WITH_POSITION Memos content
|
245
|
+
column_create Terms memos_content_20171025 COLUMN_INDEX|WITH_POSITION Memos content
|
246
|
+
DUMP
|
247
|
+
end
|
248
|
+
|
249
|
+
def test_already_latest
|
250
|
+
restore(<<-COMMANDS)
|
251
|
+
config_set alias.column CustomAliases.name
|
252
|
+
|
253
|
+
table_create CustomAliases TABLE_HASH_KEY ShortText
|
254
|
+
column_create CustomAliases name COLUMN_SCALAR ShortText
|
255
|
+
|
256
|
+
table_create Memos TABLE_HASH_KEY ShortText
|
257
|
+
column_create Memos content COLUMN_SCALAR Text
|
258
|
+
|
259
|
+
table_create Terms TABLE_PAT_KEY ShortText \
|
260
|
+
--normalizer NormalizerAuto \
|
261
|
+
--default_tokenizer TokenBigram
|
262
|
+
column_create Terms memos_content_20171022 \
|
263
|
+
COLUMN_INDEX|WITH_POSITION \
|
264
|
+
Memos content
|
265
|
+
column_create Terms memos_content_20171023 \
|
266
|
+
COLUMN_INDEX|WITH_POSITION \
|
267
|
+
Memos content
|
268
|
+
column_create Terms memos_content_20171024 \
|
269
|
+
COLUMN_INDEX|WITH_POSITION \
|
270
|
+
Memos content
|
271
|
+
column_create Terms memos_content_20171025 \
|
272
|
+
COLUMN_INDEX|WITH_POSITION \
|
273
|
+
Memos content
|
274
|
+
|
275
|
+
load --table CustomAliases
|
276
|
+
[
|
277
|
+
["_key","name"],
|
278
|
+
["Terms.memos_content","Terms.memos_content_20171025"]
|
279
|
+
]
|
280
|
+
COMMANDS
|
281
|
+
|
282
|
+
assert_equal([true, "", ""],
|
283
|
+
index_recreate("Terms.memos_content"))
|
284
|
+
|
285
|
+
assert_equal(<<-DUMP.chomp, dump)
|
286
|
+
config_set alias.column CustomAliases.name
|
287
|
+
|
288
|
+
table_create CustomAliases TABLE_HASH_KEY ShortText
|
289
|
+
column_create CustomAliases name COLUMN_SCALAR ShortText
|
290
|
+
|
291
|
+
table_create Memos TABLE_HASH_KEY ShortText
|
292
|
+
column_create Memos content COLUMN_SCALAR Text
|
293
|
+
|
294
|
+
table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
|
295
|
+
|
296
|
+
load --table CustomAliases
|
297
|
+
[
|
298
|
+
["_key","name"],
|
299
|
+
["Terms.memos_content","Terms.memos_content_20171025"]
|
300
|
+
]
|
301
|
+
|
302
|
+
column_create Terms memos_content_20171022 COLUMN_INDEX|WITH_POSITION Memos content
|
303
|
+
column_create Terms memos_content_20171023 COLUMN_INDEX|WITH_POSITION Memos content
|
304
|
+
column_create Terms memos_content_20171024 COLUMN_INDEX|WITH_POSITION Memos content
|
305
|
+
column_create Terms memos_content_20171025 COLUMN_INDEX|WITH_POSITION Memos content
|
306
|
+
DUMP
|
307
|
+
end
|
308
|
+
|
309
|
+
def test_latest_alias_but_not_exist
|
310
|
+
restore(<<-COMMANDS)
|
311
|
+
config_set alias.column CustomAliases.name
|
312
|
+
|
313
|
+
table_create CustomAliases TABLE_HASH_KEY ShortText
|
314
|
+
column_create CustomAliases name COLUMN_SCALAR ShortText
|
315
|
+
|
316
|
+
table_create Memos TABLE_HASH_KEY ShortText
|
317
|
+
column_create Memos content COLUMN_SCALAR Text
|
318
|
+
|
319
|
+
table_create Terms TABLE_PAT_KEY ShortText \
|
320
|
+
--normalizer NormalizerAuto \
|
321
|
+
--default_tokenizer TokenBigram
|
322
|
+
column_create Terms memos_content_20171022 \
|
323
|
+
COLUMN_INDEX|WITH_POSITION \
|
324
|
+
Memos content
|
325
|
+
column_create Terms memos_content_20171023 \
|
326
|
+
COLUMN_INDEX|WITH_POSITION \
|
327
|
+
Memos content
|
328
|
+
column_create Terms memos_content_20171024 \
|
329
|
+
COLUMN_INDEX|WITH_POSITION \
|
330
|
+
Memos content
|
331
|
+
|
332
|
+
load --table CustomAliases
|
333
|
+
[
|
334
|
+
["_key","name"],
|
335
|
+
["Terms.memos_content","Terms.memos_content_20171025"]
|
336
|
+
]
|
337
|
+
COMMANDS
|
338
|
+
|
339
|
+
assert_equal([
|
340
|
+
false,
|
341
|
+
"",
|
342
|
+
"Alias doesn't specify real index column: " +
|
343
|
+
"<Terms.memos_content_20171025>\n",
|
344
|
+
],
|
345
|
+
index_recreate("Terms.memos_content"))
|
346
|
+
|
347
|
+
assert_equal(<<-DUMP.chomp, dump)
|
348
|
+
config_set alias.column CustomAliases.name
|
349
|
+
|
350
|
+
table_create CustomAliases TABLE_HASH_KEY ShortText
|
351
|
+
column_create CustomAliases name COLUMN_SCALAR ShortText
|
352
|
+
|
353
|
+
table_create Memos TABLE_HASH_KEY ShortText
|
354
|
+
column_create Memos content COLUMN_SCALAR Text
|
355
|
+
|
356
|
+
table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
|
357
|
+
|
358
|
+
load --table CustomAliases
|
359
|
+
[
|
360
|
+
["_key","name"],
|
361
|
+
["Terms.memos_content","Terms.memos_content_20171025"]
|
362
|
+
]
|
363
|
+
|
364
|
+
column_create Terms memos_content_20171022 COLUMN_INDEX|WITH_POSITION Memos content
|
365
|
+
column_create Terms memos_content_20171023 COLUMN_INDEX|WITH_POSITION Memos content
|
366
|
+
column_create Terms memos_content_20171024 COLUMN_INDEX|WITH_POSITION Memos content
|
367
|
+
DUMP
|
368
|
+
end
|
369
|
+
end
|