Sha256: a93b83bbe197caeb0b4e02f2b77d445a77fd67f4c338437b66ee30a7ee949773

Contents?: true

Size: 1.46 KB

Versions: 3

Compression:

Stored size: 1.46 KB

Contents

require 'arel/visitors/postgresql'

module Arel
  module Visitors
    class PostgreSQL
      private
      
      def visit_Arel_Nodes_ContainedWithin o, collector
        infix_value o, collector, " << " 
      end

      def visit_Arel_Nodes_ContainedWithinEquals o, collector
        infix_value o, collector, " <<= " 
      end

      def visit_Arel_Nodes_Contains o, collector
        left_column = o.left.relation.engine.columns.find do |col|
          col.name == o.left.name.to_s || col.name == o.left.relation.name.to_s
        end

        if left_column && (left_column.type == :hstore || (left_column.respond_to?(:array) && left_column.array))
          infix_value o, collector, " @> "
        else
          infix_value o, collector, " >> " 
        end
      end

      def visit_Arel_Nodes_ContainsINet o, collector
        infix_value o, collector, " >> " 
      end

      def visit_Arel_Nodes_ContainsHStore o, collector
        infix_value o, collector, " @> "
      end
      
      def visit_Arel_Nodes_ContainsArray o, collector
        infix_value o, collector, " @> "
      end
      
      def visit_Arel_Nodes_ContainsEquals o, collector
        infix_value o, collector, " >>= " 
      end

      def visit_Arel_Nodes_Overlap o, collector
        infix_value o, collector, " && "
      end

      def visit_IPAddr value, collector
        collector << quote("#{value.to_s}/#{value.instance_variable_get(:@mask_addr).to_s(2).count('1')}")
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
postgres_ext-3.0.0 lib/postgres_ext/arel/4.2/visitors/postgresql.rb
postgres_ext-2.4.1 lib/postgres_ext/arel/4.2/visitors/postgresql.rb
postgres_ext-2.4.0 lib/postgres_ext/arel/4.2/visitors/postgresql.rb