[Groonga-commit] groonga/groonga-query-log at 1e97af1 [master] run-regression-test: add --vector-not-equal-empty-string option

Back to archive index

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 



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