Navigation Menu

Skip to content

Commit

Permalink
groonga: Convert drilldown parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
piroor committed Apr 28, 2014
1 parent 32dc5c5 commit 7919180
Showing 1 changed file with 55 additions and 5 deletions.
60 changes: 55 additions & 5 deletions lib/droonga/plugins/groonga/select.rb
Expand Up @@ -21,17 +21,18 @@ module Groonga
module Select
class RequestConverter
def convert(select_request)
table = select_request["table"]
result_name = table + "_result"
@table = select_request["table"]
@result_name = @table + "_result"

output_columns = select_request["output_columns"] || ""
attributes = output_columns.split(/, */)
offset = (select_request["offset"] || "0").to_i
limit = (select_request["limit"] || "10").to_i

search_request = {
"queries" => {
result_name => {
"source" => table,
@result_name => {
"source" => @table,
"output" => {
"elements" => [
"startTime",
Expand All @@ -50,7 +51,12 @@ def convert(select_request)

condition = convert_condition(select_request)
if condition
search_request["queries"][result_name]["condition"] = condition
search_request["queries"][@result_name]["condition"] = condition
end

drilldown_queries = convert_drilldown(select_request)
if drilldown_queries
search_request["queries"].merge!(drilldown_queries)
end

search_request
Expand Down Expand Up @@ -88,6 +94,50 @@ def convert_condition(select_request)

condition
end

def convert_drilldown(select_request)
drilldown_keys = select_request["drilldown"]
return nil if drilldown_keys.nil? or drilldown_keys.empty?

sort_keys = select_request["drilldown_sortby"] || ""
columns = select_request["drilldown_output_columns"] || ""
offset = select_request["drilldown_offset"] || 0
limit = select_request["drilldown_limit"] || 10

drilldown_keys = drilldown_keys.split(",")
sort_keys = sort_keys.split(",")
columns = columns.split(",")

queries = {}
drilldown_keys.each_with_index do |key, index|
query = {
"source" => @result_name,
"groupBy" => key,
"output" => {
"elements" => [
"count",
"attributes",
"records",
],
"attributes" => "_key,_nsubrecs",
"limit" => limit,
},
}

if sort_keys.empty?
query["output"]["offset"] = offset
else
query["sortBy"] = {
"keys" => sort_keys,
"offset" => offset,
"limit" => limit,
}
end

queries["drilldown_result_#{key}"] = query
end
queries
end
end

class ResponseConverter
Expand Down

0 comments on commit 7919180

Please sign in to comment.