[Groonga-commit] droonga/droonga-engine at 7919180 [master] groonga: Convert drilldown parameters

Back to archive index

YUKI Hiroshi null+****@clear*****
Mon Apr 28 17:57:38 JST 2014


YUKI Hiroshi	2014-04-28 17:57:38 +0900 (Mon, 28 Apr 2014)

  New Revision: 79191800c308d66d8bc61b093297d339f6141315
  https://github.com/droonga/droonga-engine/commit/79191800c308d66d8bc61b093297d339f6141315

  Message:
    groonga: Convert drilldown parameters

  Modified files:
    lib/droonga/plugins/groonga/select.rb

  Modified: lib/droonga/plugins/groonga/select.rb (+55 -5)
===================================================================
--- lib/droonga/plugins/groonga/select.rb    2014-04-28 17:40:53 +0900 (d8706d5)
+++ lib/droonga/plugins/groonga/select.rb    2014-04-28 17:57:38 +0900 (56d6722)
@@ -21,8 +21,9 @@ module Droonga
       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
@@ -30,8 +31,8 @@ module Droonga
 
             search_request = {
               "queries" => {
-                result_name => {
-                  "source" => table,
+                @result_name => {
+                  "source" => @table,
                   "output" => {
                     "elements"   => [
                       "startTime",
@@ -50,7 +51,12 @@ module Droonga
 
             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
@@ -88,6 +94,50 @@ module Droonga
 
             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
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index