Kouhei Sutou
null+****@clear*****
Mon Oct 1 16:06:56 JST 2018
Kouhei Sutou 2018-10-01 16:06:56 +0900 (Mon, 01 Oct 2018) Revision: 1e97af1e1f31df9ffbfdebfb73c553f8a921f1ed https://github.com/groonga/groonga-query-log/commit/1e97af1e1f31df9ffbfdebfb73c553f8a921f1ed Message: run-regression-test: add --vector-not-equal-empty-string option verify-server also has the option. Modified files: lib/groonga-query-log/command/run-regression-test.rb lib/groonga-query-log/command/verify-server.rb lib/groonga-query-log/filter-rewriter.rb lib/groonga-query-log/server-verifier.rb test/test-filter-rewriter.rb Modified: lib/groonga-query-log/command/run-regression-test.rb (+8 -0) =================================================================== --- lib/groonga-query-log/command/run-regression-test.rb 2018-09-13 22:34:45 +0900 (eb5da5c) +++ lib/groonga-query-log/command/run-regression-test.rb 2018-10-01 16:06:56 +0900 (1a0a7d8) @@ -46,6 +46,7 @@ module GroongaQueryLog @output_query_log = false @stop_on_failure = false @rewrite_vector_equal = false + @rewrite_vector_not_equal_empty_string = false @vector_accessors = [] @care_order = true @@ -158,6 +159,11 @@ module GroongaQueryLog "(#{@rewrite_vector_equal})") do |boolean| @rewrite_vector_equal = boolean end + parser.on("--[no-]rewrite-vector-not-equal-empty-string", + "Rewrite 'vector != \"\"' with 'false'", + "(#{@rewrite_vector_not_equal_empty_string})") do |boolean| + @rewrite_vector_not_equal_empty_string = boolean + end parser.on("--vector-accessor=ACCESSOR", "Mark ACCESSOR as rewrite vector targets", "You can specify multiple vector accessors by", @@ -222,6 +228,8 @@ module GroongaQueryLog :ignored_drilldown_keys => @ignored_drilldown_keys, :stop_on_failure => @stop_on_failure, :rewrite_vector_equal => @rewrite_vector_equal, + :rewrite_vector_not_equal_empty_string => + @rewrite_vector_not_equal_empty_string, :vector_accessors => @vector_accessors, :target_command_names => @target_command_names, :read_timeout => @read_timeout, Modified: lib/groonga-query-log/command/verify-server.rb (+6 -0) =================================================================== --- lib/groonga-query-log/command/verify-server.rb 2018-09-13 22:34:45 +0900 (908c19a) +++ lib/groonga-query-log/command/verify-server.rb 2018-10-01 16:06:56 +0900 (7dd379c) @@ -207,6 +207,12 @@ module GroongaQueryLog @options.rewrite_vector_equal = boolean end + parser.on("--[no-]rewrite-vector-not-equal-empty-string", + "Rewrite 'vector != \"\"' with 'false'", + "(#{@options.rewrite_vector_not_equal_empty_string?})") do |boolean| + @options.rewrite_vector_not_equal_empty_string = boolean + end + parser.on("--vector-accessor=ACCESSOR", "Mark ACCESSOR as rewrite vector targets", "You can specify multiple vector accessors by", Modified: lib/groonga-query-log/filter-rewriter.rb (+14 -0) =================================================================== --- lib/groonga-query-log/filter-rewriter.rb 2018-09-13 22:34:45 +0900 (60f695a) +++ lib/groonga-query-log/filter-rewriter.rb 2018-10-01 16:06:56 +0900 (b16de46) @@ -27,6 +27,9 @@ module GroongaQueryLog if @options[:rewrite_vector_equal] rewritten = rewrite_vector_equal(rewritten) end + if @options[:rewrite_vector_not_equal_empty_string] + rewritten = rewrite_vector_not_equal_empty_string(rewritten) + end rewritten end @@ -41,5 +44,16 @@ module GroongaQueryLog end end end + + def rewrite_vector_not_equal_empty_string(filter) + filter.gsub(/([a-zA-Z0-9_.]+) *!= *(?:''|"")/) do |matched| + variable = $1 + if @vector_accessors.include?(variable) + "false" + else + matched + end + end + end end end Modified: lib/groonga-query-log/server-verifier.rb (+27 -13) =================================================================== --- lib/groonga-query-log/server-verifier.rb 2018-09-13 22:34:45 +0900 (37311c8) +++ lib/groonga-query-log/server-verifier.rb 2018-10-01 16:06:56 +0900 (43b24ad) @@ -136,18 +136,8 @@ module GroongaQueryLog def verify_command(groonga1_client, groonga2_client, command) command["cache"] = "no" if****@optio*****_cache? command["output_type"] = "json" - filter = command["filter"] - if filter and****@optio*****_filter_rewrite? - rewriter = FilterRewriter.new(filter, - @options.to_filter_rewriter_options) - rewritten_filter = rewriter.rewrite - if filter != rewritten_filter - $stderr.puts("Rewritten filter:") - $stderr.puts(" Before: #{filter}") - $stderr.puts(" After: #{rewritten_filter}") - command["filter"] = rewritten_filter - end - end + rewrite_filter(command, "filter") + rewrite_filter(command, "scorer") response1 = groonga1_client.execute(command) response2 = groonga2_client.execute(command) compare_options = { @@ -161,6 +151,21 @@ module GroongaQueryLog end end + def rewrite_filter(command, name) + target = command[name] + return if target.nil? + return unles****@optio*****_filter_rewrite? + + rewriter = FilterRewriter.new(target, @options.to_filter_rewriter_options) + rewritten_target = rewriter.rewrite + return if target == rewritten_target + + $stderr.puts("Rewritten #{name}") + $stderr.puts(" Before: #{target}") + $stderr.puts(" After: #{rewritten_target}") + command[name] = rewritten_target + end + def report_result(output, result) @same = false command, response1, response2 = result @@ -196,6 +201,7 @@ module GroongaQueryLog attr_accessor :ignored_drilldown_keys attr_writer :stop_on_failure attr_writer :rewrite_vector_equal + attr_writer :rewrite_vector_not_equal_empty_string attr_accessor :vector_accessors def initialize @groonga1 = GroongaOptions.new @@ -220,6 +226,7 @@ module GroongaQueryLog @ignored_drilldown_keys = [] @stop_on_failure = false @rewrite_vector_equal = false + @rewrite_vector_not_equal_empty_string = false @vector_accessors = [] end @@ -243,6 +250,10 @@ module GroongaQueryLog @rewrite_vector_equal end + def rewrite_vector_not_equal_empty_string? + @rewrite_vector_not_equal_empty_string + end + def target_command_name?(name) return false if name.nil? @@ -263,12 +274,15 @@ module GroongaQueryLog end def need_filter_rewrite? - rewrite_vector_equal? + rewrite_vector_equal? or + rewrite_vector_not_equal_empty_string? end def to_filter_rewriter_options { :rewrite_vector_equal => rewrite_vector_equal?, + :rewrite_vector_not_equal_empty_string => + rewrite_vector_not_equal_empty_string?, :vector_accessors => vector_accessors, } end Modified: test/test-filter-rewriter.rb (+36 -10) =================================================================== --- test/test-filter-rewriter.rb 2018-09-13 22:34:45 +0900 (79c1b74) +++ test/test-filter-rewriter.rb 2018-10-01 16:06:56 +0900 (6969dbf) @@ -22,28 +22,54 @@ class FilterRewriterTest < Test::Unit::TestCase end class VectorEqualTest < self - def rewrite_vector_equal(filter, vector_accessors) - rewrite(filter, - :rewrite_vector_equal => true, - :vector_accessors => vector_accessors) + def rewrite(filter, vector_accessors) + super(filter, + :rewrite_vector_equal => true, + :vector_accessors => vector_accessors) end def test_not_target_accessor assert_equal("vector == \"value\"", - rewrite_vector_equal("vector == \"value\"", - ["nonexistent"])) + rewrite("vector == \"value\"", + ["nonexistent"])) end def test_parenthesis assert_equal("((vector @ \"value\"))", - rewrite_vector_equal("((vector == \"value\"))", - ["vector"])) + rewrite("((vector == \"value\"))", + ["vector"])) end def test_under_score assert_equal("vector_column @ \"value\"", - rewrite_vector_equal("vector_column == \"value\"", - ["vector_column"])) + rewrite("vector_column == \"value\"", + ["vector_column"])) + end + end + + class VectorNotEqualEmptyStringTest < self + def rewrite(filter, vector_accessors) + super(filter, + :rewrite_vector_not_equal_empty_string => true, + :vector_accessors => vector_accessors) + end + + def test_not_target_accessor + assert_equal("vector != \"\"", + rewrite("vector != \"\"", + ["nonexistent"])) + end + + def test_parenthesis + assert_equal("((false))", + rewrite("((vector != \"\"))", + ["vector"])) + end + + def test_under_score + assert_equal("false", + rewrite("vector_column != \"\"", + ["vector_column"])) end end end -------------- next part -------------- HTML����������������������������... URL: https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20181001/09008382/attachment-0001.htm