fluent-plugin-droonga 0.9.0 → 0.9.9
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/.travis.yml +3 -0
- data/Gemfile +8 -1
- data/fluent-plugin-droonga.gemspec +2 -2
- data/lib/droonga/adapter.rb +39 -0
- data/lib/droonga/adapter_runner.rb +99 -0
- data/lib/droonga/catalog/base.rb +11 -11
- data/lib/droonga/catalog/dataset.rb +54 -0
- data/lib/droonga/catalog/version1.rb +1 -1
- data/lib/droonga/collector.rb +5 -7
- data/lib/droonga/collector_plugin.rb +7 -7
- data/lib/droonga/command.rb +36 -0
- data/lib/droonga/{plugin/input_adapter/crud.rb → command_repository.rb} +14 -8
- data/lib/droonga/dispatcher.rb +86 -54
- data/lib/droonga/distributed_command_planner.rb +183 -0
- data/lib/droonga/distributor.rb +43 -17
- data/lib/droonga/handler.rb +13 -72
- data/lib/droonga/handler_message.rb +5 -5
- data/lib/droonga/handler_messenger.rb +4 -1
- data/lib/droonga/handler_plugin.rb +2 -2
- data/lib/droonga/handler_runner.rb +104 -0
- data/lib/droonga/input_message.rb +4 -4
- data/lib/droonga/legacy_pluggable.rb +66 -0
- data/lib/droonga/{input_adapter.rb → legacy_plugin.rb} +27 -22
- data/lib/droonga/{plugin_repository.rb → legacy_plugin_repository.rb} +2 -4
- data/lib/droonga/message_matcher.rb +101 -0
- data/lib/droonga/{input_adapter_plugin.rb → planner.rb} +14 -10
- data/lib/droonga/planner_plugin.rb +54 -0
- data/lib/droonga/pluggable.rb +9 -45
- data/lib/droonga/plugin.rb +9 -33
- data/lib/droonga/plugin/collector/basic.rb +2 -0
- data/lib/droonga/plugin/collector/search.rb +31 -37
- data/lib/droonga/plugin/{handler/groonga/table_remove.rb → metadata/adapter_message.rb} +23 -18
- data/lib/droonga/plugin/{handler/search.rb → metadata/handler_action.rb} +19 -15
- data/lib/droonga/plugin/metadata/input_message.rb +39 -0
- data/lib/droonga/plugin/planner/crud.rb +49 -0
- data/lib/droonga/plugin/{distributor → planner}/distributed_search_planner.rb +62 -70
- data/lib/droonga/plugin/{distributor → planner}/groonga.rb +11 -32
- data/lib/droonga/plugin/{distributor → planner}/search.rb +5 -5
- data/lib/droonga/plugin/{distributor → planner}/watch.rb +15 -6
- data/lib/droonga/plugin_loader.rb +10 -0
- data/lib/droonga/plugin_registerable.rb +34 -10
- data/lib/droonga/plugin_registry.rb +58 -0
- data/lib/droonga/plugins/crud.rb +124 -0
- data/lib/droonga/plugins/error.rb +50 -0
- data/lib/droonga/{output_adapter_plugin.rb → plugins/groonga.rb} +9 -13
- data/lib/droonga/plugins/groonga/column_create.rb +123 -0
- data/lib/droonga/plugins/groonga/generic_command.rb +65 -0
- data/lib/droonga/{plugin/output_adapter/groonga.rb → plugins/groonga/generic_response.rb} +16 -15
- data/lib/droonga/plugins/groonga/select.rb +124 -0
- data/lib/droonga/plugins/groonga/table_create.rb +106 -0
- data/lib/droonga/plugins/groonga/table_remove.rb +57 -0
- data/lib/droonga/plugins/search.rb +40 -0
- data/lib/droonga/plugins/watch.rb +156 -0
- data/lib/droonga/processor.rb +8 -10
- data/lib/droonga/searcher.rb +14 -4
- data/lib/droonga/searcher/mecab_filter.rb +67 -0
- data/lib/droonga/session.rb +5 -5
- data/lib/droonga/test.rb +1 -1
- data/lib/droonga/test/stub_handler_message.rb +1 -1
- data/lib/droonga/test/{stub_distributor.rb → stub_planner.rb} +1 -1
- data/lib/droonga/worker.rb +7 -8
- data/lib/fluent/plugin/out_droonga.rb +0 -1
- data/sample/cluster/catalog.json +2 -4
- data/sample/mecab_filter/data.grn +7 -0
- data/sample/mecab_filter/ddl.grn +7 -0
- data/sample/mecab_filter/search_with_mecab_filter.json +21 -0
- data/sample/mecab_filter/search_without_mecab_filter.json +21 -0
- data/test/command/config/default/catalog.json +2 -5
- data/test/command/suite/search/error/no-query.expected +13 -0
- data/test/command/suite/search/error/no-query.test +7 -0
- data/test/command/suite/search/error/unknown-source.expected +26 -0
- data/test/command/suite/watch/subscribe.expected +3 -3
- data/test/command/suite/watch/unsubscribe.expected +3 -3
- data/test/unit/catalog/test_dataset.rb +385 -0
- data/test/unit/catalog/test_version1.rb +111 -45
- data/test/unit/fixtures/catalog/version1.json +0 -3
- data/test/unit/helper.rb +2 -1
- data/test/unit/helper/distributed_search_planner_helper.rb +83 -0
- data/test/unit/plugin/collector/test_basic.rb +233 -376
- data/test/unit/plugin/collector/test_search.rb +8 -17
- data/test/unit/plugin/planner/search_planner/test_basic.rb +120 -0
- data/test/unit/plugin/planner/search_planner/test_group_by.rb +573 -0
- data/test/unit/plugin/planner/search_planner/test_output.rb +388 -0
- data/test/unit/plugin/planner/search_planner/test_sort_by.rb +938 -0
- data/test/unit/plugin/{distributor → planner}/test_search.rb +20 -75
- data/test/unit/{plugin/handler → plugins/crud}/test_add.rb +11 -11
- data/test/unit/plugins/groonga/select/test_adapter_input.rb +213 -0
- data/test/unit/{plugin/output_adapter/groonga/test_select.rb → plugins/groonga/select/test_adapter_output.rb} +12 -13
- data/test/unit/{plugin/handler → plugins}/groonga/test_column_create.rb +20 -5
- data/test/unit/{plugin/handler → plugins}/groonga/test_table_create.rb +5 -0
- data/test/unit/{plugin/handler → plugins}/groonga/test_table_remove.rb +8 -1
- data/test/unit/{plugin/handler → plugins}/test_groonga.rb +5 -5
- data/test/unit/{plugin/handler → plugins}/test_search.rb +21 -5
- data/test/unit/{plugin/handler → plugins}/test_watch.rb +29 -10
- data/{lib/droonga/command_mapper.rb → test/unit/test_command_repository.rb} +16 -22
- data/test/unit/{test_plugin.rb → test_legacy_plugin.rb} +3 -3
- data/test/unit/{test_plugin_repository.rb → test_legacy_plugin_repository.rb} +3 -3
- data/test/unit/test_message_matcher.rb +137 -0
- metadata +86 -66
- data/bin/grn2jsons +0 -82
- data/lib/droonga/distribution_planner.rb +0 -76
- data/lib/droonga/distributor_plugin.rb +0 -95
- data/lib/droonga/output_adapter.rb +0 -53
- data/lib/droonga/plugin/collector/groonga.rb +0 -83
- data/lib/droonga/plugin/distributor/crud.rb +0 -84
- data/lib/droonga/plugin/handler/add.rb +0 -109
- data/lib/droonga/plugin/handler/forward.rb +0 -75
- data/lib/droonga/plugin/handler/groonga.rb +0 -99
- data/lib/droonga/plugin/handler/groonga/column_create.rb +0 -106
- data/lib/droonga/plugin/handler/groonga/table_create.rb +0 -91
- data/lib/droonga/plugin/handler/watch.rb +0 -108
- data/lib/droonga/plugin/input_adapter/groonga.rb +0 -49
- data/lib/droonga/plugin/input_adapter/groonga/select.rb +0 -63
- data/lib/droonga/plugin/output_adapter/crud.rb +0 -51
- data/lib/droonga/plugin/output_adapter/groonga/select.rb +0 -54
- data/lib/groonga_command_converter.rb +0 -143
- data/sample/fluentd.conf +0 -8
- data/test/unit/plugin/distributor/test_search_planner.rb +0 -1102
- data/test/unit/plugin/input_adapter/groonga/test_select.rb +0 -248
- data/test/unit/test_command_mapper.rb +0 -44
- data/test/unit/test_groonga_command_converter.rb +0 -242
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2013 Droonga Project
|
|
1
|
+
# Copyright (C) 2013-2014 Droonga Project
|
|
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
|
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
# License along with this library; if not, write to the Free Software
|
|
14
14
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
15
15
|
|
|
16
|
-
require "droonga/plugin/
|
|
16
|
+
require "droonga/plugin/planner/search"
|
|
17
17
|
|
|
18
|
-
class
|
|
18
|
+
class SearchPlannerTest < Test::Unit::TestCase
|
|
19
19
|
def setup
|
|
20
20
|
setup_database
|
|
21
|
-
@
|
|
22
|
-
@plugin = Droonga::
|
|
21
|
+
@planner = Droonga::Test::StubPlanner.new
|
|
22
|
+
@plugin = Droonga::SearchPlanner.new(@planner)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def teardown
|
|
@@ -52,27 +52,23 @@ class SearchDistributorTest < Test::Unit::TestCase
|
|
|
52
52
|
"limit" => 20,
|
|
53
53
|
},
|
|
54
54
|
},
|
|
55
|
-
"query3" => {
|
|
56
|
-
"source" => "User",
|
|
57
|
-
"output" => {
|
|
58
|
-
"format" => "complex",
|
|
59
|
-
"elements" => ["count", "records"],
|
|
60
|
-
"attributes" => [],
|
|
61
|
-
"offset" => 0,
|
|
62
|
-
"limit" => 30,
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
55
|
},
|
|
66
56
|
},
|
|
67
57
|
}
|
|
68
58
|
|
|
69
|
-
@plugin.process("search", envelope)
|
|
59
|
+
@planner.distribute(@plugin.process("search", envelope))
|
|
70
60
|
|
|
71
61
|
message = []
|
|
72
62
|
|
|
73
63
|
message << {
|
|
74
64
|
"type" => "search_reduce",
|
|
75
65
|
"body" => {
|
|
66
|
+
"errors" => {
|
|
67
|
+
"errors_reduced" => {
|
|
68
|
+
"limit" => -1,
|
|
69
|
+
"type" => "sum",
|
|
70
|
+
},
|
|
71
|
+
},
|
|
76
72
|
"query1" => {
|
|
77
73
|
"query1_reduced" => {
|
|
78
74
|
"count" => {
|
|
@@ -85,13 +81,6 @@ class SearchDistributorTest < Test::Unit::TestCase
|
|
|
85
81
|
},
|
|
86
82
|
},
|
|
87
83
|
},
|
|
88
|
-
},
|
|
89
|
-
"inputs" => ["query1"],
|
|
90
|
-
"outputs" => ["query1_reduced"],
|
|
91
|
-
}
|
|
92
|
-
message << {
|
|
93
|
-
"type" => "search_reduce",
|
|
94
|
-
"body" => {
|
|
95
84
|
"query2" => {
|
|
96
85
|
"query2_reduced" => {
|
|
97
86
|
"count" => {
|
|
@@ -105,41 +94,22 @@ class SearchDistributorTest < Test::Unit::TestCase
|
|
|
105
94
|
},
|
|
106
95
|
},
|
|
107
96
|
},
|
|
108
|
-
"inputs" => ["query2"],
|
|
109
|
-
"outputs" => ["query2_reduced"],
|
|
110
|
-
}
|
|
111
|
-
message << {
|
|
112
|
-
"type" => "search_reduce",
|
|
113
|
-
"body" => {
|
|
114
|
-
"query3" => {
|
|
115
|
-
"query3_reduced" => {
|
|
116
|
-
"count" => {
|
|
117
|
-
"type" => "sum",
|
|
118
|
-
},
|
|
119
|
-
"records" => {
|
|
120
|
-
"type" => "sort",
|
|
121
|
-
"operators" => [],
|
|
122
|
-
"limit" => 30,
|
|
123
|
-
},
|
|
124
|
-
},
|
|
125
|
-
},
|
|
126
|
-
},
|
|
127
|
-
"inputs" => ["query3"],
|
|
128
|
-
"outputs" => ["query3_reduced"],
|
|
97
|
+
"inputs" => ["errors", "query1", "query2"],
|
|
98
|
+
"outputs" => ["errors_reduced", "query1_reduced", "query2_reduced"],
|
|
129
99
|
}
|
|
130
100
|
|
|
131
101
|
gatherer = {
|
|
132
102
|
"type" => "search_gather",
|
|
133
103
|
"body" => {
|
|
104
|
+
"errors_reduced" => {
|
|
105
|
+
"output" => "errors",
|
|
106
|
+
},
|
|
134
107
|
"query1_reduced" => {
|
|
135
108
|
"output" => "query1",
|
|
136
109
|
"elements" => {
|
|
137
110
|
"records" => {
|
|
138
|
-
"type" => "sort",
|
|
139
|
-
"offset" => 0,
|
|
140
111
|
"limit" => 10,
|
|
141
112
|
"format" => "complex",
|
|
142
|
-
"attributes" => [],
|
|
143
113
|
},
|
|
144
114
|
},
|
|
145
115
|
},
|
|
@@ -147,31 +117,16 @@ class SearchDistributorTest < Test::Unit::TestCase
|
|
|
147
117
|
"output" => "query2",
|
|
148
118
|
"elements" => {
|
|
149
119
|
"records" => {
|
|
150
|
-
"type" => "sort",
|
|
151
|
-
"offset" => 0,
|
|
152
120
|
"limit" => 20,
|
|
153
121
|
"format" => "complex",
|
|
154
|
-
"attributes" => [],
|
|
155
|
-
},
|
|
156
|
-
},
|
|
157
|
-
},
|
|
158
|
-
"query3_reduced" => {
|
|
159
|
-
"output" => "query3",
|
|
160
|
-
"elements" => {
|
|
161
|
-
"records" => {
|
|
162
|
-
"type" => "sort",
|
|
163
|
-
"offset" => 0,
|
|
164
|
-
"limit" => 30,
|
|
165
|
-
"format" => "complex",
|
|
166
|
-
"attributes" => [],
|
|
167
122
|
},
|
|
168
123
|
},
|
|
169
124
|
},
|
|
170
125
|
},
|
|
171
126
|
"inputs" => [
|
|
127
|
+
"errors_reduced",
|
|
172
128
|
"query1_reduced",
|
|
173
129
|
"query2_reduced",
|
|
174
|
-
"query3_reduced",
|
|
175
130
|
],
|
|
176
131
|
"post" => true,
|
|
177
132
|
}
|
|
@@ -203,27 +158,17 @@ class SearchDistributorTest < Test::Unit::TestCase
|
|
|
203
158
|
"limit" => 20,
|
|
204
159
|
},
|
|
205
160
|
},
|
|
206
|
-
"query3" => {
|
|
207
|
-
"source" => "User",
|
|
208
|
-
"output" => {
|
|
209
|
-
"format" => "simple",
|
|
210
|
-
"elements" => ["count", "records"],
|
|
211
|
-
"attributes" => [],
|
|
212
|
-
"offset" => 0,
|
|
213
|
-
"limit" => 30,
|
|
214
|
-
},
|
|
215
|
-
},
|
|
216
161
|
},
|
|
217
162
|
},
|
|
218
163
|
"outputs" => [
|
|
164
|
+
"errors",
|
|
219
165
|
"query1",
|
|
220
166
|
"query2",
|
|
221
|
-
"query3",
|
|
222
167
|
],
|
|
223
168
|
"replica" => "random",
|
|
224
169
|
}
|
|
225
170
|
message << searcher
|
|
226
171
|
|
|
227
|
-
assert_equal([message], @
|
|
172
|
+
assert_equal([message], @planner.messages)
|
|
228
173
|
end
|
|
229
174
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (C) 2013 Droonga Project
|
|
1
|
+
# Copyright (C) 2013-2014 Droonga Project
|
|
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
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
# License along with this library; if not, write to the Free Software
|
|
14
14
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
15
15
|
|
|
16
|
-
require "droonga/
|
|
16
|
+
require "droonga/plugins/crud"
|
|
17
17
|
|
|
18
|
-
class
|
|
18
|
+
class CRUDAddHandlerTest < Test::Unit::TestCase
|
|
19
19
|
SUCCESS_RESPONSE_BODY = {
|
|
20
20
|
"success" => true,
|
|
21
21
|
}
|
|
@@ -37,7 +37,7 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
|
37
37
|
|
|
38
38
|
def setup_handler
|
|
39
39
|
@worker = StubWorker.new
|
|
40
|
-
@handler = Droonga::
|
|
40
|
+
@handler = Droonga::Plugins::CRUD::Handler.new("name", @worker.context)
|
|
41
41
|
@messenger = Droonga::Test::StubHandlerMessenger.new
|
|
42
42
|
end
|
|
43
43
|
|
|
@@ -47,7 +47,7 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
|
47
47
|
|
|
48
48
|
def process(request)
|
|
49
49
|
message = Droonga::Test::StubHandlerMessage.new(request)
|
|
50
|
-
@handler.
|
|
50
|
+
@handler.handle(message, @messenger)
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
public
|
|
@@ -93,7 +93,7 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
|
93
93
|
"table" => "Users",
|
|
94
94
|
"values" => {"country" => "japan"},
|
|
95
95
|
}
|
|
96
|
-
assert_raise(Droonga::
|
|
96
|
+
assert_raise(Droonga::Plugins::CRUD::Handler::MissingPrimaryKeyParameter) do
|
|
97
97
|
process(request)
|
|
98
98
|
end
|
|
99
99
|
end
|
|
@@ -104,7 +104,7 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
|
104
104
|
"key" => "mori",
|
|
105
105
|
"values" => {"age" => "secret"},
|
|
106
106
|
}
|
|
107
|
-
assert_raise(Droonga::
|
|
107
|
+
assert_raise(Droonga::Plugins::CRUD::Handler::InvalidValue) do
|
|
108
108
|
process(request)
|
|
109
109
|
end
|
|
110
110
|
end
|
|
@@ -115,7 +115,7 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
|
115
115
|
"key" => "mori",
|
|
116
116
|
"values" => {"birthday" => "today"},
|
|
117
117
|
}
|
|
118
|
-
assert_raise(Droonga::
|
|
118
|
+
assert_raise(Droonga::Plugins::CRUD::Handler::InvalidValue) do
|
|
119
119
|
process(request)
|
|
120
120
|
end
|
|
121
121
|
end
|
|
@@ -126,7 +126,7 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
|
126
126
|
"key" => "mori",
|
|
127
127
|
"values" => {"unknown" => "unknown"},
|
|
128
128
|
}
|
|
129
|
-
assert_raise(Droonga::
|
|
129
|
+
assert_raise(Droonga::Plugins::CRUD::Handler::UnknownColumn) do
|
|
130
130
|
process(request)
|
|
131
131
|
end
|
|
132
132
|
end
|
|
@@ -170,7 +170,7 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
|
170
170
|
request = {
|
|
171
171
|
"values" => {},
|
|
172
172
|
}
|
|
173
|
-
assert_raise(Droonga::
|
|
173
|
+
assert_raise(Droonga::Plugins::CRUD::Handler::MissingTableParameter) do
|
|
174
174
|
process(request)
|
|
175
175
|
end
|
|
176
176
|
end
|
|
@@ -180,7 +180,7 @@ class AddHandlerTest < Test::Unit::TestCase
|
|
|
180
180
|
"table" => "Nonexistent",
|
|
181
181
|
"values" => {},
|
|
182
182
|
}
|
|
183
|
-
assert_raise(Droonga::
|
|
183
|
+
assert_raise(Droonga::Plugins::CRUD::Handler::UnknownTable) do
|
|
184
184
|
process(request)
|
|
185
185
|
end
|
|
186
186
|
end
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# Copyright (C) 2013-2014 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/plugins/groonga/select"
|
|
17
|
+
|
|
18
|
+
class GroongaSelectAdapterInputTest < Test::Unit::TestCase
|
|
19
|
+
private
|
|
20
|
+
def convert(select_request)
|
|
21
|
+
converter = Droonga::Plugins::Groonga::Select::RequestConverter.new
|
|
22
|
+
converter.convert(select_request)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class OutputColumnsTest < self
|
|
26
|
+
def assert_attributes(expected_attributes, output_columns)
|
|
27
|
+
select_request = {
|
|
28
|
+
"table" => "EmptyTable",
|
|
29
|
+
"output_columns" => output_columns,
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
expected_search_request = {
|
|
33
|
+
"queries" => {
|
|
34
|
+
"EmptyTable_result" => {
|
|
35
|
+
"source" => "EmptyTable",
|
|
36
|
+
"output" => {
|
|
37
|
+
"elements" => [
|
|
38
|
+
"startTime",
|
|
39
|
+
"elapsedTime",
|
|
40
|
+
"count",
|
|
41
|
+
"attributes",
|
|
42
|
+
"records",
|
|
43
|
+
],
|
|
44
|
+
"attributes" => expected_attributes,
|
|
45
|
+
"offset" => 0,
|
|
46
|
+
"limit" => 10,
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
}
|
|
51
|
+
assert_equal(expected_search_request, convert(select_request))
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_multiple_columns
|
|
55
|
+
assert_attributes(["_id", "_key"], "_id,_key")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class FunctionTest < self
|
|
59
|
+
def test_single_argument
|
|
60
|
+
assert_attributes(["snippet_html(content)"], "snippet_html(content)")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_with_columns
|
|
64
|
+
assert_attributes(["_id","_key","snippet_html(content)"], "_id,_key,snippet_html(content)")
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
class MatchColumnsTest < self
|
|
70
|
+
def assert_matchTo(expected_matchTo, match_columns)
|
|
71
|
+
select_request = {
|
|
72
|
+
"table" => "EmptyTable",
|
|
73
|
+
"match_columns" => match_columns,
|
|
74
|
+
"query" => "QueryTest",
|
|
75
|
+
"output_columns" => "_id",
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
expected_search_request = {
|
|
79
|
+
"queries" => {
|
|
80
|
+
"EmptyTable_result" => {
|
|
81
|
+
"source" => "EmptyTable",
|
|
82
|
+
"condition"=> {
|
|
83
|
+
"query" => "QueryTest",
|
|
84
|
+
"matchTo"=> expected_matchTo,
|
|
85
|
+
"defaultOperator"=> "&&",
|
|
86
|
+
"allowPragma"=> false,
|
|
87
|
+
"allowColumn"=> true,
|
|
88
|
+
},
|
|
89
|
+
"output" => {
|
|
90
|
+
"elements" => [
|
|
91
|
+
"startTime",
|
|
92
|
+
"elapsedTime",
|
|
93
|
+
"count",
|
|
94
|
+
"attributes",
|
|
95
|
+
"records",
|
|
96
|
+
],
|
|
97
|
+
"attributes" => ["_id"],
|
|
98
|
+
"offset" => 0,
|
|
99
|
+
"limit" => 10,
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
}
|
|
104
|
+
assert_equal(expected_search_request, convert(select_request))
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def test_single_column
|
|
108
|
+
assert_matchTo(["_key"], "_key")
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def test_multiple_columns
|
|
112
|
+
assert_matchTo(["_key", "content"], "_key || content")
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
class OffsetTest < self
|
|
117
|
+
def assert_offset(expected_offset, offset)
|
|
118
|
+
select_request = {
|
|
119
|
+
"table" => "EmptyTable",
|
|
120
|
+
"output_columns" => "_id",
|
|
121
|
+
}
|
|
122
|
+
select_request["offset"] = offset unless offset.nil?
|
|
123
|
+
|
|
124
|
+
expected_search_request = {
|
|
125
|
+
"queries" => {
|
|
126
|
+
"EmptyTable_result" => {
|
|
127
|
+
"source" => "EmptyTable",
|
|
128
|
+
"output" => {
|
|
129
|
+
"elements" => [
|
|
130
|
+
"startTime",
|
|
131
|
+
"elapsedTime",
|
|
132
|
+
"count",
|
|
133
|
+
"attributes",
|
|
134
|
+
"records",
|
|
135
|
+
],
|
|
136
|
+
"attributes" => ["_id"],
|
|
137
|
+
"offset" => expected_offset,
|
|
138
|
+
"limit" => 10,
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
}
|
|
143
|
+
assert_equal(expected_search_request, convert(select_request))
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def test_zero
|
|
147
|
+
assert_offset(0, "0")
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def test_large
|
|
151
|
+
assert_offset(100, "100")
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def test_integer
|
|
155
|
+
assert_offset(100, 100)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def test_default
|
|
159
|
+
assert_offset(0, nil)
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
class LimitTest < self
|
|
164
|
+
def assert_limit(expected_limit, limit)
|
|
165
|
+
select_request = {
|
|
166
|
+
"table" => "EmptyTable",
|
|
167
|
+
"output_columns" => "_id",
|
|
168
|
+
}
|
|
169
|
+
select_request["limit"] = limit unless limit.nil?
|
|
170
|
+
|
|
171
|
+
expected_search_request = {
|
|
172
|
+
"queries" => {
|
|
173
|
+
"EmptyTable_result" => {
|
|
174
|
+
"source" => "EmptyTable",
|
|
175
|
+
"output" => {
|
|
176
|
+
"elements" => [
|
|
177
|
+
"startTime",
|
|
178
|
+
"elapsedTime",
|
|
179
|
+
"count",
|
|
180
|
+
"attributes",
|
|
181
|
+
"records",
|
|
182
|
+
],
|
|
183
|
+
"attributes" => ["_id"],
|
|
184
|
+
"offset" => 0,
|
|
185
|
+
"limit" => expected_limit,
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
}
|
|
190
|
+
assert_equal(expected_search_request, convert(select_request))
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def test_zero
|
|
194
|
+
assert_limit(0, "0")
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def test_large
|
|
198
|
+
assert_limit(100, "100")
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def test_negative
|
|
202
|
+
assert_limit(-1, "-1")
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def test_integer
|
|
206
|
+
assert_limit(100, 100)
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def test_default
|
|
210
|
+
assert_limit(10, nil)
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
end
|