Kouhei Sutou 2019-03-04 12:13:31 +0900 (Mon, 04 Mar 2019) Revision: 89776fadadda5ebd33e5cc7b3d8c165cd2ddd33f https://github.com/groonga/groonga/commit/89776fadadda5ebd33e5cc7b3d8c165cd2ddd33f Message: expr optimize: "const OP var" is available only when OP is swappable For example, "==" is a swappable OP. Modified files: lib/mrb/scripts/expression_rewriters/optimizer.rb Modified: lib/mrb/scripts/expression_rewriters/optimizer.rb (+25 -8) =================================================================== --- lib/mrb/scripts/expression_rewriters/optimizer.rb 2019-03-04 11:59:16 +0900 (fcf0982de) +++ lib/mrb/scripts/expression_rewriters/optimizer.rb 2019-03-04 12:13:31 +0900 (07c92514f) @@ -34,22 +34,39 @@ module Groonga ExpressionTree::LogicalOperation.new(node.operator, optimized_sub_nodes) when ExpressionTree::BinaryOperation - optimized_left = optimize_node(table, node.left) - optimized_right = optimize_node(table, node.right) + optimize_binary_operation_node(table, node) + else + node + end + end + + def optimize_binary_operation_node(table, node) + optimized_left = optimize_node(table, node.left) + optimized_right = optimize_node(table, node.right) + if node.option + optimized_option = optimize_node(table, node.option) + else + optimized_option = nil + end + case node.operator + when Operator::EQUAL if optimized_left.is_a?(ExpressionTree::Constant) and - optimized_right.is_a?(ExpressionTree::Variable) + optimized_right.is_a?(ExpressionTree::Variable) ExpressionTree::BinaryOperation.new(node.operator, optimized_right, - optimized_left) - elsif node.left == optimized_left and node.right == optimized_right - node + optimized_left, + optimized_option) else ExpressionTree::BinaryOperation.new(node.operator, optimized_left, - optimized_right) + optimized_right, + optimized_option) end else - node + ExpressionTree::BinaryOperation.new(node.operator, + optimized_left, + optimized_right, + optimized_option) end end -------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20190304/fe307681/attachment-0001.html>