Sha256: a4b9e50e0b232f608f1529fb52e1a023ee0d847ca91163798be8e592d72691e9

Contents?: true

Size: 1.22 KB

Versions: 4

Compression:

Stored size: 1.22 KB

Contents

module SearchCop
  module Visitors
    module Postgres
      class FulltextQuery < Visitor
        def visit_SearchCopGrammar_Nodes_MatchesFulltextNot(node)
          "!'#{node.right.gsub /[\s&|!:'"]+/, " "}'"
        end

        def visit_SearchCopGrammar_Nodes_MatchesFulltext(node)
          "'#{node.right.gsub /[\s&|!:'"]+/, " "}'"
        end

        def visit_SearchCopGrammar_Nodes_And_Fulltext(node)
          node.nodes.collect { |node| "(#{visit node})" }.join(" & ")
        end

        def visit_SearchCopGrammar_Nodes_Or_Fulltext(node)
          node.nodes.collect { |node| "(#{visit node})" }.join(" | ")
        end
      end

      def visit_SearchCopGrammar_Nodes_Matches(node)
        "#{visit node.left} ILIKE #{visit node.right}"
      end

      def visit_SearchCopGrammar_Attributes_Collection(node)
        node.attributes.collect { |attribute| visit attribute }.join(" || ' ' || ")
      end

      def visit_SearchCopGrammar_Nodes_FulltextExpression(node)
        dictionary = node.collection.options[:dictionary] || "simple"

        "to_tsvector(#{visit dictionary}, #{visit node.collection}) @@ to_tsquery(#{visit dictionary}, #{visit FulltextQuery.new(connection).visit(node.node)})"
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
search_cop-1.0.6 lib/search_cop/visitors/postgres.rb
search_cop-1.0.5 lib/search_cop/visitors/postgres.rb
search_cop-1.0.4 lib/search_cop/visitors/postgres.rb
search_cop-1.0.3 lib/search_cop/visitors/postgres.rb