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