Sha256: 6af1686e775da6bb09b58dc8bed05c62381018a80f425cca55e6c7d999471981

Contents?: true

Size: 1.34 KB

Versions: 6

Compression:

Stored size: 1.34 KB

Contents

module Groonga
  module ExpressionRewriters
    class Optimizer < ExpressionRewriter
      register "optimizer"

      def rewrite
        codes = @expression.codes
        n_codes = codes.size

        # (A >= x && A < y) -> between(A, x, "include", y, "exclude")
        return nil if n_codes != 7

        return nil if codes[6].op != Operator::AND

        return nil if codes[0].op != Operator::GET_VALUE
        return nil if codes[1].op != Operator::PUSH
        return nil if codes[2].op != Operator::GREATER_EQUAL

        return nil if codes[3].op != Operator::GET_VALUE
        return nil if codes[4].op != Operator::PUSH
        return nil if codes[5].op != Operator::LESS

        return nil if codes[3].value != codes[0].value

        variable = @expression[0]
        rewritten = Expression.create(context[variable.domain])
        rewritten.append_object(Context.instance["between"], Operator::PUSH, 1)
        rewritten.append_object(codes[0].value, Operator::GET_VALUE, 1)
        rewritten.append_constant(codes[1].value.value, Operator::PUSH, 1)
        rewritten.append_constant("include", Operator::PUSH, 1)
        rewritten.append_constant(codes[4].value.value, Operator::PUSH, 1)
        rewritten.append_constant("exclude", Operator::PUSH, 1)
        rewritten.append_operator(Operator::CALL, 5)
        rewritten
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
rroonga-6.0.0-x64-mingw32 vendor/local/lib/groonga/plugins/expression_rewriters/optimizer.rb
rroonga-6.0.0-x86-mingw32 vendor/local/lib/groonga/plugins/expression_rewriters/optimizer.rb
rroonga-5.1.1-x86-mingw32 vendor/local/lib/groonga/plugins/expression_rewriters/optimizer.rb
rroonga-5.1.1-x64-mingw32 vendor/local/lib/groonga/plugins/expression_rewriters/optimizer.rb
rroonga-5.0.9-x86-mingw32 vendor/local/lib/groonga/plugins/expression_rewriters/optimizer.rb
rroonga-5.0.9-x64-mingw32 vendor/local/lib/groonga/plugins/expression_rewriters/optimizer.rb