Class: ThinkingSphinx::AbstractAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/thinking_sphinx/adapters/abstract_adapter.rb

Direct Known Subclasses

MysqlAdapter, PostgreSQLAdapter

Class Method Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (AbstractAdapter) initialize(model)

A new instance of AbstractAdapter



3
4
5
# File 'lib/thinking_sphinx/adapters/abstract_adapter.rb', line 3

def initialize(model)
  @model = model
end

Class Method Details

+ (Object) adapter_for_model(model)



26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/thinking_sphinx/adapters/abstract_adapter.rb', line 26

def self.adapter_for_model(model)
  case ThinkingSphinx.database_adapter
  when String
    ThinkingSphinx.database_adapter.to_sym
  when NilClass
    standard_adapter_for_model model
  when Proc
    ThinkingSphinx.database_adapter.call model
  else
    ThinkingSphinx.database_adapter
  end
end

+ (Object) detect(model)



12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/thinking_sphinx/adapters/abstract_adapter.rb', line 12

def self.detect(model)
  adapter = adapter_for_model model
  case adapter
  when :mysql
    ThinkingSphinx::MysqlAdapter.new model
  when :postgresql
    ThinkingSphinx::PostgreSQLAdapter.new model
  when Class
    adapter.new model
  else
    raise "Invalid Database Adapter: Sphinx only supports MySQL and PostgreSQL, not #{adapter}"
  end
end

+ (Object) standard_adapter_for_model(model)



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/thinking_sphinx/adapters/abstract_adapter.rb', line 39

def self.standard_adapter_for_model(model)
  case model.connection.class.name
  when "ActiveRecord::ConnectionAdapters::MysqlAdapter",
       "ActiveRecord::ConnectionAdapters::MysqlplusAdapter",
       "ActiveRecord::ConnectionAdapters::Mysql2Adapter",
       "ActiveRecord::ConnectionAdapters::NullDBAdapter"
    :mysql
  when "ActiveRecord::ConnectionAdapters::PostgreSQLAdapter"
    :postgresql
  when "ActiveRecord::ConnectionAdapters::JdbcAdapter"
    case model.connection.config[:adapter]
    when "jdbcmysql"
      :mysql
    when "jdbcpostgresql"
      :postgresql
    else
      model.connection.config[:adapter].to_sym
    end
  else
    model.connection.class.name
  end
end

Instance Method Details

- (Object) bigint_pattern



66
67
68
# File 'lib/thinking_sphinx/adapters/abstract_adapter.rb', line 66

def bigint_pattern
  /bigint/i
end

- (Object) case(expression, pairs, default)



74
75
76
77
78
79
# File 'lib/thinking_sphinx/adapters/abstract_adapter.rb', line 74

def case(expression, pairs, default)
  "CASE #{expression} " +
  pairs.keys.inject('') { |string, key|
    string + "WHEN '#{key}' THEN #{pairs[key]} "
  } + "ELSE #{default} END"
end

- (Object) downcase(clause)



70
71
72
# File 'lib/thinking_sphinx/adapters/abstract_adapter.rb', line 70

def downcase(clause)
  "LOWER(#{clause})"
end

- (Object) quote_with_table(column)



62
63
64
# File 'lib/thinking_sphinx/adapters/abstract_adapter.rb', line 62

def quote_with_table(column)
  "#{@model.quoted_table_name}.#{@model.connection.quote_column_name(column)}"
end

- (Object) setup



7
8
9
10
# File 'lib/thinking_sphinx/adapters/abstract_adapter.rb', line 7

def setup
  # Deliberately blank - subclasses should do something though. Well, if
  # they need to.
end