Class: ScopedSearch::QueryBuilder::PostgreSQLAdapter
- Inherits:
-
ScopedSearch::QueryBuilder
- Object
- ScopedSearch::QueryBuilder
- ScopedSearch::QueryBuilder::PostgreSQLAdapter
- Defined in:
- lib/scoped_search/query_builder.rb
Overview
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.
Constant Summary
Constant Summary
Constants inherited from ScopedSearch::QueryBuilder
Instance Attribute Summary
Attributes inherited from ScopedSearch::QueryBuilder
Instance Method Summary (collapse)
- - (Object) order_by(order, &block)
-
- (Object) sql_operator(operator, field)
Switches out the default LIKE operator in the default sql_operator method for ILIKE or @@ if full text searching is enabled.
-
- (Object) sql_test(field, operator, value, lhs, &block)
Switches out the default query generation of the sql_test method if full text searching is enabled and a text search is being performed.
-
- (Object) to_not_sql(rhs, definition, &block)
Returns a NOT (…) SQL fragment that negates the current AST node's children.
Methods inherited from ScopedSearch::QueryBuilder
#build_find_params, build_query, class_for, #datetime_test, #initialize, #set_test, #translate_value
Constructor Details
This class inherits a constructor from ScopedSearch::QueryBuilder
Instance Method Details
- (Object) order_by(order, &block)
501 502 503 504 505 |
# File 'lib/scoped_search/query_builder.rb', line 501 def order_by(order, &block) sql = super(order, &block) sql += sql.include?('DESC') ? ' NULLS LAST ' : ' NULLS FIRST ' if sql sql end |
- (Object) sql_operator(operator, field)
Switches out the default LIKE operator in the default sql_operator method for ILIKE or @@ if full text searching is enabled.
486 487 488 489 490 491 492 493 494 |
# File 'lib/scoped_search/query_builder.rb', line 486 def sql_operator(operator, field) raise ScopedSearch::QueryNotSupported, "the operator '#{operator}' is not supported for field type '#{field.type}'" if [:like, :unlike].include?(operator) and !field.textual? return '@@' if [:like, :unlike].include?(operator) and field.full_text_search case operator when :like then 'ILIKE' when :unlike then 'NOT ILIKE' else super(operator, field) end end |
- (Object) sql_test(field, operator, value, lhs, &block)
Switches out the default query generation of the sql_test method if full text searching is enabled and a text search is being performed.
473 474 475 476 477 478 479 480 481 482 |
# File 'lib/scoped_search/query_builder.rb', line 473 def sql_test(field, operator, value, lhs, &block) if [:like, :unlike].include?(operator) and field.full_text_search yield(:parameter, value) negation = (operator == :unlike) ? "NOT " : "" locale = (field.full_text_search == true) ? 'english' : field.full_text_search return "#{negation}to_tsvector('#{locale}', #{field.to_sql(operator, &block)}) #{self.sql_operator(operator, field)} to_tsquery('#{locale}', ?)" else super end end |
- (Object) to_not_sql(rhs, definition, &block)
Returns a NOT (…) SQL fragment that negates the current AST node's children
497 498 499 |
# File 'lib/scoped_search/query_builder.rb', line 497 def to_not_sql(rhs, definition, &block) "NOT COALESCE(#{rhs.to_sql(self, definition, &block)}, false)" end |