[Groonga-commit] groonga/groonga at 8a11500 [master] expression_tree: simplify

Back to archive index

Kouhei Sutou null+****@clear*****
Sat Jun 25 22:50:03 JST 2016


Kouhei Sutou	2016-06-25 22:50:03 +0900 (Sat, 25 Jun 2016)

  New Revision: 8a11500ea96de657efb6b183a49d7f9ca9dfec0d
  https://github.com/groonga/groonga/commit/8a11500ea96de657efb6b183a49d7f9ca9dfec0d

  Message:
    expression_tree: simplify

  Added files:
    lib/mrb/scripts/expression_tree/procedure.rb
  Modified files:
    lib/mrb/scripts/expression_tree.rb
    lib/mrb/scripts/expression_tree/function_call.rb
    lib/mrb/scripts/expression_tree/sources.am
    lib/mrb/scripts/expression_tree_builder.rb
    plugins/expression_rewriters/optimizer.rb

  Modified: lib/mrb/scripts/expression_tree.rb (+1 -0)
===================================================================
--- lib/mrb/scripts/expression_tree.rb    2016-06-25 22:48:52 +0900 (ccc1ef5)
+++ lib/mrb/scripts/expression_tree.rb    2016-06-25 22:50:03 +0900 (50c1c43)
@@ -2,4 +2,5 @@ require "expression_tree/constant"
 require "expression_tree/binary_operation"
 require "expression_tree/function_call"
 require "expression_tree/logical_operation"
+require "expression_tree/procedure"
 require "expression_tree/variable"

  Modified: lib/mrb/scripts/expression_tree/function_call.rb (+1 -1)
===================================================================
--- lib/mrb/scripts/expression_tree/function_call.rb    2016-06-25 22:48:52 +0900 (d09da0a)
+++ lib/mrb/scripts/expression_tree/function_call.rb    2016-06-25 22:50:03 +0900 (44c6213)
@@ -9,7 +9,7 @@ module Groonga
       end
 
       def build(expression)
-        expression.append_object(@procedure, Operator::PUSH, 1)
+        @procedure.build(expression)
         @arguments.each do |argument|
           argument.build(expression)
         end

  Added: lib/mrb/scripts/expression_tree/procedure.rb (+18 -0) 100644
===================================================================
--- /dev/null
+++ lib/mrb/scripts/expression_tree/procedure.rb    2016-06-25 22:50:03 +0900 (0288a55)
@@ -0,0 +1,18 @@
+module Groonga
+  module ExpressionTree
+    class Procedure
+      attr_reader :value
+      def initialize(value)
+        @value = value
+      end
+
+      def name
+        @value.name
+      end
+
+      def build(expression)
+        expression.append_object(@value, Operator::PUSH, 1)
+      end
+    end
+  end
+end

  Modified: lib/mrb/scripts/expression_tree/sources.am (+1 -0)
===================================================================
--- lib/mrb/scripts/expression_tree/sources.am    2016-06-25 22:48:52 +0900 (6fd10bd)
+++ lib/mrb/scripts/expression_tree/sources.am    2016-06-25 22:50:03 +0900 (9e0c3e1)
@@ -3,4 +3,5 @@ RUBY_SCRIPT_FILES =				\
 	constant.rb				\
 	function_call.rb			\
 	logical_operation.rb			\
+	procedure.rb				\
 	variable.rb

  Modified: lib/mrb/scripts/expression_tree_builder.rb (+10 -25)
===================================================================
--- lib/mrb/scripts/expression_tree_builder.rb    2016-06-25 22:48:52 +0900 (6f58328)
+++ lib/mrb/scripts/expression_tree_builder.rb    2016-06-25 22:50:03 +0900 (c5f4e97)
@@ -51,29 +51,7 @@ module Groonga
     def build
       stack = []
       codes =****@expre*****
-      is_function = false
-      procedure = nil
-      arguments = []
       codes.each do |code|
-        if is_function
-          case code.op
-          when Operator::GET_VALUE
-            arguments << ExpressionTree::Variable.new(code.value)
-          when Operator::PUSH
-            arguments << ExpressionTree::Constant.new(code.value.value)
-            #TODO: should support HashTable
-          when Operator::CALL
-            node = ExpressionTree::FunctionCall.new(procedure, arguments)
-            stack.push(node)
-            is_function = false
-            procedure = nil
-            arguments = []
-          else
-            raise "unknown operator for arguments: #{code.inspect}"
-          end
-          next
-        end
-
         case code.op
         when *LOGICAL_OPERATORS
           right = stack.pop
@@ -93,12 +71,19 @@ module Groonga
           stack.push(node)
         when Operator::PUSH
           if code.value.is_a?(Procedure)
-            procedure = code.value
-            is_function = true
+            node = ExpressionTree::Procedure.new(code.value)
           else
             node = ExpressionTree::Constant.new(code.value.value)
-            stack.push(node)
           end
+          stack.push(node)
+        when Operator::CALL
+          arguments = []
+          code.n_args.times do
+            arguments.unshift(stack.pop)
+          end
+          procedure = stack.pop
+          node = ExpressionTree::FunctionCall.new(procedure, arguments)
+          stack.push(node)
         else
           raise "unknown operator: #{code.inspect}"
         end

  Modified: plugins/expression_rewriters/optimizer.rb (+1 -1)
===================================================================
--- plugins/expression_rewriters/optimizer.rb    2016-06-25 22:48:52 +0900 (a9ea003)
+++ plugins/expression_rewriters/optimizer.rb    2016-06-25 22:50:03 +0900 (3dfee68)
@@ -122,7 +122,7 @@ module Groonga
         end
         return nil if greater_node.nil? or less_node.nil?
 
-        between = context["between"]
+        between = ExpressionTree::Procedure.new(context["between"])
         if greater_node.operator == Operator::GREATER
           greater_border = "exclude"
         else
-------------- next part --------------
HTML����������������������������...
Descargar 



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