class ScopedSearch::QueryBuilder::PostgreSQLAdapter

The PostgreSQLAdapter make sure that searches are case sensitive when using the like/unlike operators, by using the PostrgeSQL-specific ILIKE operator instead of LIKE.

Public Instance Methods

order_by(order, &block) click to toggle source
Calls superclass method ScopedSearch::QueryBuilder#order_by
    # File lib/scoped_search/query_builder.rb
549 def order_by(order, &block)
550   sql = super(order, &block)
551   if sql
552     field, _ = find_field_for_order_by(order, &block)
553     sql += sql.include?('DESC') ? ' NULLS LAST ' : ' NULLS FIRST ' if !field.nil? && field.column.null
554   end
555   sql
556 end
sql_operator(operator, field) click to toggle source

Switches out the default LIKE operator in the default sql_operator method for ILIKE or @@ if full text searching is enabled.

Calls superclass method ScopedSearch::QueryBuilder#sql_operator
    # File lib/scoped_search/query_builder.rb
534 def sql_operator(operator, field)
535   raise ScopedSearch::QueryNotSupported, "the operator '#{operator}' is not supported for field type '#{field.type}'" if [:like, :unlike].include?(operator) and !field.textual?
536   return '@@' if [:like, :unlike].include?(operator) && field.full_text_search
537   case operator
538     when :like   then 'ILIKE'
539     when :unlike then 'NOT ILIKE'
540     else super(operator, field)
541   end
542 end
sql_test(field, operator, value, lhs) { |:parameter, value| ... } click to toggle source

Switches out the default query generation of the sql_test method if full text searching is enabled and a text search is being performed.

Calls superclass method ScopedSearch::QueryBuilder#sql_test
    # File lib/scoped_search/query_builder.rb
521 def sql_test(field, operator, value, lhs, &block)
522   if [:like, :unlike].include?(operator) && field.full_text_search
523     yield(:parameter, value)
524     negation = (operator == :unlike) ? "NOT " : ""
525     locale = (field.full_text_search == true) ? 'english' : field.full_text_search
526     return "#{negation}to_tsvector('#{locale}', #{field.to_sql(operator, &block)}) #{self.sql_operator(operator, field)} to_tsquery('#{locale}', ?)"
527   else
528     super
529   end
530 end
to_not_sql(rhs, definition, &block) click to toggle source

Returns a NOT (…) SQL fragment that negates the current AST node's children

    # File lib/scoped_search/query_builder.rb
545 def to_not_sql(rhs, definition, &block)
546   "NOT COALESCE(#{rhs.to_sql(self, definition, &block)}, false)"
547 end