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