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 592 def order_by(order, &block) 593 sql = super(order, &block) 594 if sql 595 field, _ = find_field_for_order_by(order, &block) 596 sql += sql.include?('DESC') ? ' NULLS LAST ' : ' NULLS FIRST ' if !field.nil? && field.column.null 597 end 598 sql 599 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 577 def sql_operator(operator, field) 578 raise ScopedSearch::QueryNotSupported, "the operator '#{operator}' is not supported for field type '#{field.type}'" if !field.virtual? and [:like, :unlike].include?(operator) and !field.textual? 579 return '@@' if [:like, :unlike].include?(operator) && field.full_text_search 580 case operator 581 when :like then 'ILIKE' 582 when :unlike then 'NOT ILIKE' 583 else super(operator, field) 584 end 585 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 564 def sql_test(field, operator, value, lhs, &block) 565 if [:like, :unlike].include?(operator) && field.full_text_search 566 yield(:parameter, value) 567 negation = (operator == :unlike) ? "NOT " : "" 568 locale = (field.full_text_search == true) ? 'english' : field.full_text_search 569 return "#{negation}to_tsvector('#{locale}', #{field.to_sql(operator, &block)}) #{self.sql_operator(operator, field)} to_tsquery('#{locale}', ?)" 570 else 571 super 572 end 573 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 588 def to_not_sql(rhs, definition, &block) 589 "NOT COALESCE(#{rhs.to_sql(self, definition, &block)}, false)" 590 end