fluent-plugin-droonga 0.0.2
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 +7 -0
- data/.gitignore +1 -0
- data/.travis.yml +7 -0
- data/Gemfile +40 -0
- data/LICENSE.txt +14 -0
- data/README.md +18 -0
- data/Rakefile +25 -0
- data/benchmark/benchmark.rb +123 -0
- data/benchmark/utils.rb +243 -0
- data/benchmark/watch/benchmark-notify.rb +143 -0
- data/benchmark/watch/benchmark-notify.sh +19 -0
- data/benchmark/watch/benchmark-publish.rb +120 -0
- data/benchmark/watch/benchmark-scan.rb +210 -0
- data/benchmark/watch/catalog.json +32 -0
- data/benchmark/watch/fluentd.conf +12 -0
- data/bin/grn2jsons +85 -0
- data/fluent-plugin-droonga.gemspec +41 -0
- data/lib/droonga/adapter.rb +156 -0
- data/lib/droonga/catalog.rb +153 -0
- data/lib/droonga/command_mapper.rb +45 -0
- data/lib/droonga/engine.rb +83 -0
- data/lib/droonga/executor.rb +289 -0
- data/lib/droonga/handler.rb +140 -0
- data/lib/droonga/handler_plugin.rb +35 -0
- data/lib/droonga/job_queue.rb +83 -0
- data/lib/droonga/job_queue_schema.rb +65 -0
- data/lib/droonga/logger.rb +34 -0
- data/lib/droonga/plugin.rb +41 -0
- data/lib/droonga/plugin/adapter/groonga/select.rb +88 -0
- data/lib/droonga/plugin/adapter_groonga.rb +40 -0
- data/lib/droonga/plugin/handler/groonga/column_create.rb +103 -0
- data/lib/droonga/plugin/handler/groonga/table_create.rb +100 -0
- data/lib/droonga/plugin/handler_add.rb +44 -0
- data/lib/droonga/plugin/handler_forward.rb +70 -0
- data/lib/droonga/plugin/handler_groonga.rb +52 -0
- data/lib/droonga/plugin/handler_proxy.rb +82 -0
- data/lib/droonga/plugin/handler_search.rb +33 -0
- data/lib/droonga/plugin/handler_watch.rb +102 -0
- data/lib/droonga/proxy.rb +371 -0
- data/lib/droonga/searcher.rb +415 -0
- data/lib/droonga/server.rb +112 -0
- data/lib/droonga/sweeper.rb +42 -0
- data/lib/droonga/watch_schema.rb +88 -0
- data/lib/droonga/watcher.rb +256 -0
- data/lib/droonga/worker.rb +51 -0
- data/lib/fluent/plugin/out_droonga.rb +56 -0
- data/lib/groonga_command_converter.rb +137 -0
- data/sample/cluster/catalog.json +43 -0
- data/sample/cluster/fluentd.conf +12 -0
- data/sample/fluentd.conf +8 -0
- data/test/fixtures/catalog.json +43 -0
- data/test/fixtures/document.grn +23 -0
- data/test/helper.rb +24 -0
- data/test/helper/fixture.rb +28 -0
- data/test/helper/sandbox.rb +73 -0
- data/test/helper/stub_worker.rb +27 -0
- data/test/helper/watch_helper.rb +35 -0
- data/test/plugin/adapter/groonga/test_select.rb +176 -0
- data/test/plugin/handler/groonga/test_column_create.rb +127 -0
- data/test/plugin/handler/groonga/test_table_create.rb +140 -0
- data/test/plugin/handler/test_handler_add.rb +135 -0
- data/test/plugin/handler/test_handler_groonga.rb +64 -0
- data/test/plugin/handler/test_handler_search.rb +512 -0
- data/test/plugin/handler/test_handler_watch.rb +168 -0
- data/test/run-test.rb +55 -0
- data/test/test_adapter.rb +48 -0
- data/test/test_catalog.rb +59 -0
- data/test/test_command_mapper.rb +44 -0
- data/test/test_groonga_command_converter.rb +242 -0
- data/test/test_handler.rb +53 -0
- data/test/test_job_queue_schema.rb +45 -0
- data/test/test_output.rb +99 -0
- data/test/test_sweeper.rb +95 -0
- data/test/test_watch_schema.rb +57 -0
- data/test/test_watcher.rb +336 -0
- data/test/test_worker.rb +144 -0
- metadata +299 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
# Copyright (C) 2013 droonga project
|
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 StubWorker
|
17
|
+
attr_reader :context, :body, :envelope
|
18
|
+
|
19
|
+
def initialize()
|
20
|
+
@context = Groonga::Context.default
|
21
|
+
@envelope = {}
|
22
|
+
end
|
23
|
+
|
24
|
+
def post(body, destination=nil)
|
25
|
+
@body = body
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# Copyright (C) 2013 droonga project
|
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
|
+
require "droonga/watch_schema"
|
17
|
+
|
18
|
+
module WatchHelper
|
19
|
+
def setup_database
|
20
|
+
FileUtils.rm_rf(@database_path.dirname.to_s)
|
21
|
+
FileUtils.mkdir_p(@database_path.dirname.to_s)
|
22
|
+
@database = Groonga::Database.create(:path => @database_path.to_s)
|
23
|
+
end
|
24
|
+
|
25
|
+
def setup_schema
|
26
|
+
schema = Droonga::WatchSchema.new(Groonga::Context.default)
|
27
|
+
schema.ensure_created
|
28
|
+
end
|
29
|
+
|
30
|
+
def teardown_database
|
31
|
+
@database.close
|
32
|
+
@database = nil
|
33
|
+
FileUtils.rm_rf(@database_path.dirname.to_s)
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,176 @@
|
|
1
|
+
# Copyright (C) 2013 droonga project
|
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
|
+
require "droonga/plugin/adapter/groonga/select"
|
17
|
+
|
18
|
+
class AdapterGroongaSelectTest < Test::Unit::TestCase
|
19
|
+
def setup
|
20
|
+
@select = Droonga::GroongaAdapter::Select.new
|
21
|
+
end
|
22
|
+
|
23
|
+
class RequestTest < self
|
24
|
+
def test_empty
|
25
|
+
select_request = {
|
26
|
+
"table" => "EmptyTable",
|
27
|
+
"output_columns" => "_id",
|
28
|
+
}
|
29
|
+
|
30
|
+
expected_search_request = {
|
31
|
+
"queries" => {
|
32
|
+
"EmptyTable" => {
|
33
|
+
"source" => "EmptyTable",
|
34
|
+
"output" => {
|
35
|
+
"elements" => [
|
36
|
+
"startTime",
|
37
|
+
"elapsedTime",
|
38
|
+
"count",
|
39
|
+
"attributes",
|
40
|
+
"records",
|
41
|
+
],
|
42
|
+
"attributes" => ["_id"],
|
43
|
+
},
|
44
|
+
},
|
45
|
+
},
|
46
|
+
}
|
47
|
+
|
48
|
+
assert_equal(expected_search_request, convert(select_request))
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
def convert(select_request)
|
53
|
+
@select.convert_request(select_request)
|
54
|
+
end
|
55
|
+
|
56
|
+
class OutputColumnsTest < self
|
57
|
+
def assert_attributes(expected_attributes, output_columns)
|
58
|
+
select_request = {
|
59
|
+
"table" => "EmptyTable",
|
60
|
+
"output_columns" => output_columns,
|
61
|
+
}
|
62
|
+
|
63
|
+
expected_search_request = {
|
64
|
+
"queries" => {
|
65
|
+
"EmptyTable" => {
|
66
|
+
"source" => "EmptyTable",
|
67
|
+
"output" => {
|
68
|
+
"elements" => [
|
69
|
+
"startTime",
|
70
|
+
"elapsedTime",
|
71
|
+
"count",
|
72
|
+
"attributes",
|
73
|
+
"records",
|
74
|
+
],
|
75
|
+
"attributes" => expected_attributes,
|
76
|
+
},
|
77
|
+
},
|
78
|
+
},
|
79
|
+
}
|
80
|
+
assert_equal(expected_search_request, convert(select_request))
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_multiple_columns
|
84
|
+
assert_attributes(["_id", "_key"], "_id,_key")
|
85
|
+
end
|
86
|
+
|
87
|
+
class FunctionTest < self
|
88
|
+
def test_single_argument
|
89
|
+
assert_attributes(["snippet_html(content)"], "snippet_html(content)")
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_with_columns
|
93
|
+
assert_attributes(["_id","_key","snippet_html(content)"], "_id,_key,snippet_html(content)")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
class MatchColumnsTest < self
|
99
|
+
def assert_matchTo(expected_matchTo, match_columns)
|
100
|
+
select_request = {
|
101
|
+
"table" => "EmptyTable",
|
102
|
+
"match_columns" => match_columns,
|
103
|
+
"query" => "QueryTest",
|
104
|
+
"output_columns" => "_id",
|
105
|
+
}
|
106
|
+
|
107
|
+
expected_search_request = {
|
108
|
+
"queries" => {
|
109
|
+
"EmptyTable" => {
|
110
|
+
"source" => "EmptyTable",
|
111
|
+
"condition"=> {
|
112
|
+
"query" => "QueryTest",
|
113
|
+
"matchTo"=> expected_matchTo,
|
114
|
+
"defaultOperator"=> "&&",
|
115
|
+
"allowPragma"=> false,
|
116
|
+
"allowColumn"=> true,
|
117
|
+
},
|
118
|
+
"output" => {
|
119
|
+
"elements" => [
|
120
|
+
"startTime",
|
121
|
+
"elapsedTime",
|
122
|
+
"count",
|
123
|
+
"attributes",
|
124
|
+
"records",
|
125
|
+
],
|
126
|
+
"attributes" => ["_id"],
|
127
|
+
},
|
128
|
+
},
|
129
|
+
},
|
130
|
+
}
|
131
|
+
assert_equal(expected_search_request, convert(select_request))
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_single_column
|
135
|
+
assert_matchTo(["_key"], "_key")
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_multiple_columns
|
139
|
+
assert_matchTo(["_key", "content"], "_key || content")
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
class ResponseTest < self
|
145
|
+
def test_empty
|
146
|
+
start_time = "2001-08-02T10:45:23.5+09:00"
|
147
|
+
elapsed_time = 0
|
148
|
+
count = 0
|
149
|
+
|
150
|
+
search_response = {
|
151
|
+
"EmptyTable" => {
|
152
|
+
"startTime" => start_time,
|
153
|
+
"elapsedTime" => elapsed_time,
|
154
|
+
"count" => count,
|
155
|
+
"attributes" => [
|
156
|
+
{"name" => "_id", "type" => "UInt32", "vector" => false},
|
157
|
+
],
|
158
|
+
"records" => [],
|
159
|
+
},
|
160
|
+
}
|
161
|
+
|
162
|
+
status_code = 0
|
163
|
+
start_time_in_unix_time = Time.parse(start_time).to_f
|
164
|
+
headers = [["_id","UInt32"]]
|
165
|
+
expected_select_response = [[status_code, start_time_in_unix_time, elapsed_time],
|
166
|
+
[[[count], headers]]]
|
167
|
+
|
168
|
+
assert_equal(expected_select_response, convert(search_response))
|
169
|
+
end
|
170
|
+
|
171
|
+
private
|
172
|
+
def convert(search_response)
|
173
|
+
@select.convert_response(search_response)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
# Copyright (C) 2013 droonga project
|
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 ColumnCreateTest < GroongaHandlerTest
|
17
|
+
def test_success
|
18
|
+
@handler.table_create({"name" => "Books"})
|
19
|
+
@handler.column_create({"table" => "Books", "name" => "title", "type" => "ShortText"})
|
20
|
+
assert_equal([true], @worker.body)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_name
|
24
|
+
@handler.table_create({"name" => "Books"})
|
25
|
+
@handler.column_create({"table" => "Books", "name" => "title", "type" => "ShortText"})
|
26
|
+
assert_equal(<<-SCHEMA, dump)
|
27
|
+
table_create Books TABLE_HASH_KEY --key_type ShortText
|
28
|
+
column_create Books title COLUMN_SCALAR ShortText
|
29
|
+
SCHEMA
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_type
|
33
|
+
@handler.table_create({"name" => "Books"})
|
34
|
+
@handler.column_create({"table" => "Books", "name" => "main_text", "type" => "LongText"})
|
35
|
+
assert_equal(<<-SCHEMA, dump)
|
36
|
+
table_create Books TABLE_HASH_KEY --key_type ShortText
|
37
|
+
column_create Books main_text COLUMN_SCALAR LongText
|
38
|
+
SCHEMA
|
39
|
+
end
|
40
|
+
|
41
|
+
class FlagsTest < self
|
42
|
+
class DataStoreTest < self
|
43
|
+
data({
|
44
|
+
"COLUMN_SCALAR" => {
|
45
|
+
:flags => "COLUMN_SCALAR",
|
46
|
+
},
|
47
|
+
"COLUMN_VECTOR" => {
|
48
|
+
:flags => "COLUMN_VECTOR",
|
49
|
+
},
|
50
|
+
})
|
51
|
+
def test_data_store_column_type(data)
|
52
|
+
request = {
|
53
|
+
"table" => "Books",
|
54
|
+
"name" => "title",
|
55
|
+
"type" => "ShortText",
|
56
|
+
"flags" => data[:flags],
|
57
|
+
}
|
58
|
+
@handler.table_create({"name" => "Books"})
|
59
|
+
@handler.column_create(request)
|
60
|
+
assert_equal(<<-EXPECTED, dump)
|
61
|
+
table_create Books TABLE_HASH_KEY --key_type ShortText
|
62
|
+
column_create Books title #{data[:flags]} ShortText
|
63
|
+
EXPECTED
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class IndexTest < self
|
68
|
+
def setup
|
69
|
+
super
|
70
|
+
@handler.table_create({"name" => "Books"})
|
71
|
+
@handler.column_create({"table" => "Books", "name" => "title", "type" => "ShortText"})
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_index_column_type
|
75
|
+
data = {
|
76
|
+
:flags => "COLUMN_INDEX",
|
77
|
+
}
|
78
|
+
request = {
|
79
|
+
"table" => "Books",
|
80
|
+
"name" => "entry_title",
|
81
|
+
"type" => "Books",
|
82
|
+
"source" => "title",
|
83
|
+
"flags" => data[:flags],
|
84
|
+
}
|
85
|
+
@handler.column_create(request)
|
86
|
+
assert_equal(<<-EXPECTED, dump)
|
87
|
+
table_create Books TABLE_HASH_KEY --key_type ShortText
|
88
|
+
column_create Books title COLUMN_SCALAR ShortText
|
89
|
+
|
90
|
+
column_create Books entry_title #{data[:flags]} Books title
|
91
|
+
EXPECTED
|
92
|
+
end
|
93
|
+
|
94
|
+
data({
|
95
|
+
"WITH_SECTION" => {
|
96
|
+
:flags => "WITH_SECTION",
|
97
|
+
},
|
98
|
+
"WITH_WEIGHT" => {
|
99
|
+
:flags => "WITH_WEIGHT",
|
100
|
+
},
|
101
|
+
"WITH_POSITION" => {
|
102
|
+
:flags => "WITH_POSITION",
|
103
|
+
},
|
104
|
+
"COLUMN_INDEX with all" => {
|
105
|
+
:flags => "WITH_SECTION|WITH_WEIGHT|WITH_POSITION",
|
106
|
+
},
|
107
|
+
})
|
108
|
+
def test_index_flags(data)
|
109
|
+
flags = "COLUMN_INDEX|#{data[:flags]}"
|
110
|
+
request = {
|
111
|
+
"table" => "Books",
|
112
|
+
"name" => "entry_title",
|
113
|
+
"type" => "Books",
|
114
|
+
"source" => "title",
|
115
|
+
"flags" => flags,
|
116
|
+
}
|
117
|
+
@handler.column_create(request)
|
118
|
+
assert_equal(<<-EXPECTED, dump)
|
119
|
+
table_create Books TABLE_HASH_KEY --key_type ShortText
|
120
|
+
column_create Books title COLUMN_SCALAR ShortText
|
121
|
+
|
122
|
+
column_create Books entry_title #{flags} Books title
|
123
|
+
EXPECTED
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
# Copyright (C) 2013 droonga project
|
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 TableCreateTest < GroongaHandlerTest
|
17
|
+
def test_success
|
18
|
+
@handler.table_create({"name" => "Books"})
|
19
|
+
assert_equal(
|
20
|
+
[[Droonga::GroongaHandler::Status::SUCCESS, NORMALIZED_START_TIME, NORMALIZED_ELAPSED_TIME], true],
|
21
|
+
[normalize_header(@worker.body.first), @worker.body.last]
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_failure
|
26
|
+
@handler.table_create({})
|
27
|
+
assert_equal(
|
28
|
+
[[Droonga::GroongaHandler::Status::INVALID_ARGUMENT, NORMALIZED_START_TIME, NORMALIZED_ELAPSED_TIME], false],
|
29
|
+
[normalize_header(@worker.body.first), @worker.body.last]
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_name
|
34
|
+
@handler.table_create({"name" => "Books"})
|
35
|
+
assert_equal(<<-SCHEMA, dump)
|
36
|
+
table_create Books TABLE_HASH_KEY --key_type ShortText
|
37
|
+
SCHEMA
|
38
|
+
end
|
39
|
+
|
40
|
+
class FlagsTest < self
|
41
|
+
data({
|
42
|
+
"TABLE_NO_KEY" => {
|
43
|
+
:flags => "TABLE_NO_KEY",
|
44
|
+
:schema => <<-SCHEMA,
|
45
|
+
table_create Books TABLE_NO_KEY
|
46
|
+
SCHEMA
|
47
|
+
},
|
48
|
+
"TABLE_HASH_KEY" => {
|
49
|
+
:flags => "TABLE_HASH_KEY",
|
50
|
+
:schema => <<-SCHEMA,
|
51
|
+
table_create Books TABLE_HASH_KEY --key_type ShortText
|
52
|
+
SCHEMA
|
53
|
+
},
|
54
|
+
"TABLE_PAT_KEY" => {
|
55
|
+
:flags => "TABLE_PAT_KEY",
|
56
|
+
:schema => <<-SCHEMA,
|
57
|
+
table_create Books TABLE_PAT_KEY --key_type ShortText
|
58
|
+
SCHEMA
|
59
|
+
},
|
60
|
+
"TABLE_DAT_KEY" => {
|
61
|
+
:flags => "TABLE_DAT_KEY",
|
62
|
+
:schema => <<-SCHEMA,
|
63
|
+
table_create Books TABLE_DAT_KEY --key_type ShortText
|
64
|
+
SCHEMA
|
65
|
+
},
|
66
|
+
"KEY_WITH_SIS with TABLE_PAT_KEY" => {
|
67
|
+
:flags => "KEY_WITH_SIS|TABLE_PAT_KEY",
|
68
|
+
:schema => <<-SCHEMA,
|
69
|
+
table_create Books TABLE_PAT_KEY|KEY_WITH_SIS --key_type ShortText
|
70
|
+
SCHEMA
|
71
|
+
},
|
72
|
+
"KEY_WITH_SIS without TABLE_PAT_KEY" => {
|
73
|
+
:flags => "TABLE_NO_KEY|KEY_WITH_SIS",
|
74
|
+
:schema => <<-SCHEMA,
|
75
|
+
table_create Books TABLE_NO_KEY
|
76
|
+
SCHEMA
|
77
|
+
},
|
78
|
+
})
|
79
|
+
def test_flags(data)
|
80
|
+
request = {
|
81
|
+
"name" => "Books",
|
82
|
+
"flags" => data[:flags],
|
83
|
+
}
|
84
|
+
@handler.table_create(request)
|
85
|
+
assert_equal(data[:schema], dump)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
class KeyTypeTest < self
|
90
|
+
def test_key_type
|
91
|
+
request = {
|
92
|
+
"name" => "Books",
|
93
|
+
"key_type" => "Int32",
|
94
|
+
}
|
95
|
+
@handler.table_create(request)
|
96
|
+
assert_equal(<<-SCHEMA, dump)
|
97
|
+
table_create Books TABLE_HASH_KEY --key_type Int32
|
98
|
+
SCHEMA
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
class ValueTypeTest < self
|
103
|
+
def test_value_type
|
104
|
+
request = {
|
105
|
+
"name" => "Books",
|
106
|
+
"value_type" => "Int32",
|
107
|
+
}
|
108
|
+
@handler.table_create(request)
|
109
|
+
assert_equal(<<-SCHEMA, dump)
|
110
|
+
table_create Books TABLE_HASH_KEY --key_type ShortText --value_type Int32
|
111
|
+
SCHEMA
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
class DefaultTokenizerTest < self
|
116
|
+
def test_default_tokenizer
|
117
|
+
request = {
|
118
|
+
"name" => "Books",
|
119
|
+
"default_tokenizer" => "TokenBigram",
|
120
|
+
}
|
121
|
+
@handler.table_create(request)
|
122
|
+
assert_equal(<<-SCHEMA, dump)
|
123
|
+
table_create Books TABLE_HASH_KEY --key_type ShortText --default_tokenizer TokenBigram
|
124
|
+
SCHEMA
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
class NormalizerTest < self
|
129
|
+
def test_normalizer
|
130
|
+
request = {
|
131
|
+
"name" => "Books",
|
132
|
+
"normalizer" => "NormalizerAuto",
|
133
|
+
}
|
134
|
+
@handler.table_create(request)
|
135
|
+
assert_equal(<<-SCHEMA, dump)
|
136
|
+
table_create Books TABLE_HASH_KEY|KEY_NORMALIZE --key_type ShortText
|
137
|
+
SCHEMA
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|