[Groonga-commit] groonga/groonga-command at d1a0729 [master] Support more logical_select parameters

Back to archive index

Kouhei Sutou null+****@clear*****
Fri Aug 14 16:42:39 JST 2015


Kouhei Sutou	2015-08-14 16:42:39 +0900 (Fri, 14 Aug 2015)

  New Revision: d1a0729fbcb7657af64ff610ba766168fb38a696
  https://github.com/groonga/groonga-command/commit/d1a0729fbcb7657af64ff610ba766168fb38a696

  Message:
    Support more logical_select parameters

  Modified files:
    lib/groonga/command/base.rb
    lib/groonga/command/logical-select.rb
    lib/groonga/command/select.rb
    test/command/test-logical-select.rb

  Modified: lib/groonga/command/base.rb (+15 -0)
===================================================================
--- lib/groonga/command/base.rb    2015-08-13 10:20:39 +0900 (f660c1b)
+++ lib/groonga/command/base.rb    2015-08-14 16:42:39 +0900 (6e6673f)
@@ -118,6 +118,21 @@ module Groonga
           value.nil?
         end
       end
+
+      def integer_value(name)
+        value = self[name]
+        return value if value.nil?
+
+        begin
+          Integer(value)
+        rescue ArgumentError
+          value
+        end
+      end
+
+      def array_value(name)
+        (self[name] || "").strip.split(/\s*,\s*/)
+      end
     end
   end
 end

  Modified: lib/groonga/command/logical-select.rb (+95 -0)
===================================================================
--- lib/groonga/command/logical-select.rb    2015-08-13 10:20:39 +0900 (197e153)
+++ lib/groonga/command/logical-select.rb    2015-08-14 16:42:39 +0900 (6285cb0)
@@ -34,6 +34,17 @@ module Groonga
             :max,
             :max_border,
             :filter,
+            :sortby,
+            :output_columns,
+            :offset,
+            :limit,
+            :drilldown,
+            :drilldown_sortby,
+            :drilldown_output_columns,
+            :drilldown_offset,
+            :drilldown_limit,
+            :drilldown_calc_types,
+            :drilldown_calc_target,
           ]
         end
       end
@@ -86,6 +97,90 @@ module Groonga
       def filter
         self[:filter]
       end
+
+      # @return [String] `sortby` parameter value.
+      #
+      # @since 1.1.3
+      def sortby
+        self[:sortby]
+      end
+
+      # @return [String] `output_columns` parameter value.
+      #
+      # @since 1.1.3
+      def output_columns
+        self[:output_columns]
+      end
+
+      # @return [Integer] `offset` parameter value.
+      #
+      # @since 1.1.3
+      def offset
+        integer_value(:offset)
+      end
+
+      # @return [Integer] `limit` parameter value.
+      #
+      # @since 1.1.3
+      def limit
+        integer_value(:limit)
+      end
+
+      # @return [String] `drilldown` parameter value.
+      #
+      # @since 1.1.3
+      def drilldown
+        self[:drilldown]
+      end
+
+      # @return [Array<String>] drilldown keys.
+      #
+      # @since 1.1.3
+      def drilldowns
+        @drilldowns ||= array_value(:drilldown)
+      end
+
+      # @return [String] `drilldown_sortby` parameter value.
+      #
+      # @since 1.1.3
+      def drilldown_sortby
+        self[:drilldown_sortby]
+      end
+
+      # @return [String] `drilldown_output_columns` parameter value.
+      #
+      # @since 1.1.3
+      def drilldown_output_columns
+        self[:drilldown_output_columns]
+      end
+
+      # @return [String] `drilldown_offset` parameter value.
+      #
+      # @since 1.1.3
+      def drilldown_offset
+        integer_value(:drilldown_offset)
+      end
+
+      # @return [String] `drilldown_limit` parameter value.
+      #
+      # @since 1.1.3
+      def drilldown_limit
+        integer_value(:drilldown_limit)
+      end
+
+      # @return [String] `drilldown_calc_types` parameter value.
+      #
+      # @since 1.1.3
+      def drilldown_calc_types
+        self[:drilldown_calc_types]
+      end
+
+      # @return [String] `drilldown_calc_target` parameter value.
+      #
+      # @since 1.1.3
+      def drilldown_calc_target
+        self[:drilldown_calc_target]
+      end
     end
   end
 end

  Modified: lib/groonga/command/select.rb (+1 -1)
===================================================================
--- lib/groonga/command/select.rb    2015-08-13 10:20:39 +0900 (f299ba3)
+++ lib/groonga/command/select.rb    2015-08-14 16:42:39 +0900 (0f54b62)
@@ -70,7 +70,7 @@ module Groonga
       end
 
       def drilldowns
-        @drilldowns ||= (self[:drilldown] || "").split(/\s*,\s*/)
+        @drilldowns ||= array_value(:drilldown)
       end
 
       def output_columns

  Modified: test/command/test-logical-select.rb (+124 -14)
===================================================================
--- test/command/test-logical-select.rb    2015-08-13 10:20:39 +0900 (8089222)
+++ test/command/test-logical-select.rb    2015-08-14 16:42:39 +0900 (201fb56)
@@ -24,13 +24,24 @@ class LogicalSelectCommandTest < Test::Unit::TestCase
 
   class ConstructorTest < self
     def test_ordered_arguments
-      logical_table  = "Logs"
-      shard_key      = "timestamp",
-      min            = "2015-02-12 00:00:00"
-      min_border     = "include"
-      max            = "2015-02-13 00:00:00"
-      max_border     = "exclude"
-      filter         = "action == 'Shutdown'"
+      logical_table              = "Logs"
+      shard_key                  = "timestamp",
+      min                        = "2015-02-12 00:00:00"
+      min_border                 = "include"
+      max                        = "2015-02-13 00:00:00"
+      max_border                 = "exclude"
+      filter                     = "action == 'Shutdown'"
+      sortby                     = "_score"
+      output_columns             = "_key, name"
+      offset                     = "10"
+      limit                      = "20"
+      drilldown                  = "name"
+      drilldown_sortby           = "_nsubrecs"
+      drilldown_output_columns   = "name, _nsubrecs"
+      drilldown_offset           = "5"
+      drilldown_limit            = "10"
+      drilldown_calc_types       = "MIN,AVG"
+      drilldown_calc_target      = "n_occurred"
 
       ordered_arguments = [
         logical_table,
@@ -40,16 +51,38 @@ class LogicalSelectCommandTest < Test::Unit::TestCase
         max,
         max_border,
         filter,
+        sortby,
+        output_columns,
+        offset,
+        limit,
+        drilldown,
+        drilldown_sortby,
+        drilldown_output_columns,
+        drilldown_offset,
+        drilldown_limit,
+        drilldown_calc_types,
+        drilldown_calc_target,
       ]
       command = logical_select_command({}, ordered_arguments)
       assert_equal({
-                     :logical_table  => logical_table,
-                     :shard_key      => shard_key,
-                     :min            => min,
-                     :min_border     => min_border,
-                     :max            => max,
-                     :max_border     => max_border,
-                     :filter         => filter,
+                     :logical_table            => logical_table,
+                     :shard_key                => shard_key,
+                     :min                      => min,
+                     :min_border               => min_border,
+                     :max                      => max,
+                     :max_border               => max_border,
+                     :filter                   => filter,
+                     :sortby                   => sortby,
+                     :output_columns           => output_columns,
+                     :offset                   => offset,
+                     :limit                    => limit,
+                     :drilldown                => drilldown,
+                     :drilldown_sortby         => drilldown_sortby,
+                     :drilldown_output_columns => drilldown_output_columns,
+                     :drilldown_offset         => drilldown_offset,
+                     :drilldown_limit          => drilldown_limit,
+                     :drilldown_calc_types     => drilldown_calc_types,
+                     :drilldown_calc_target    => drilldown_calc_target,
                    },
                    command.arguments)
     end
@@ -96,4 +129,81 @@ class LogicalSelectCommandTest < Test::Unit::TestCase
       assert_equal("action == 'Shutdown'", command.filter)
     end
   end
+
+  class SortbyTest < self
+    def test_reader
+      command = logical_select_command(:sortby => "_score")
+      assert_equal("_score", command.sortby)
+    end
+  end
+
+  class OutputColumnsTest < self
+    def test_reader
+      command = logical_select_command(:output_columns => "_key, name")
+      assert_equal("_key, name", command.output_columns)
+    end
+  end
+
+  class OffsetTest < self
+    def test_reader
+      command = logical_select_command(:offset => "10")
+      assert_equal(10, command.offset)
+    end
+  end
+
+  class LimitTest < self
+    def test_reader
+      command = logical_select_command(:limit => "20")
+      assert_equal(20, command.limit)
+    end
+  end
+
+  class DrilldownTest < self
+    def test_reader
+      command = logical_select_command(:drilldown => "name")
+      assert_equal("name", command.drilldown)
+    end
+  end
+
+  class DrilldownSortbyTest < self
+    def test_reader
+      command = logical_select_command(:drilldown_sortby => "_nsubrecs")
+      assert_equal("_nsubrecs", command.drilldown_sortby)
+    end
+  end
+
+  class DrilldownOutputColumnsTest < self
+    def test_reader
+      command = logical_select_command(:drilldown_output_columns => "name, _nsubrecs")
+      assert_equal("name, _nsubrecs", command.drilldown_output_columns)
+    end
+  end
+
+  class DrilldownOffsetTest < self
+    def test_reader
+      command = logical_select_command(:drilldown_offset => "5")
+      assert_equal(5, command.drilldown_offset)
+    end
+  end
+
+  class DrilldownLimitTest < self
+    def test_reader
+      command = logical_select_command(:drilldown_limit => "10")
+      assert_equal(10, command.drilldown_limit)
+    end
+  end
+
+  class DrilldownCalcTypesTest < self
+    def test_reader
+      command = logical_select_command(:drilldown_calc_types => "MIN,AVG")
+      assert_equal("MIN,AVG", command.drilldown_calc_types)
+    end
+  end
+
+  class DrilldownCalcTargetTest < self
+    def test_reader
+      command = logical_select_command(:drilldown_calc_target => "n_occurred")
+      assert_equal("n_occurred", command.drilldown_calc_target)
+    end
+  end
 end
-------------- next part --------------
HTML����������������������������...
Download 



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