Class: ActiveRecord::ConnectionAdapters::FirebirdAdapter

Inherits:
AbstractAdapter
  • Object
show all
Includes:
ActiveRecord::ConnectionAdapters::Firebird::DatabaseLimits, ActiveRecord::ConnectionAdapters::Firebird::DatabaseStatements, ActiveRecord::ConnectionAdapters::Firebird::SchemaStatements
Defined in:
lib/active_record/connection_adapters/firebird_adapter.rb

Constant Summary collapse

ADAPTER_NAME =
"Firebird".freeze
DEFAULT_ENCODING =
"Windows-1252".freeze

Instance Method Summary collapse

Instance Method Details

#active?Boolean

Returns:

  • (Boolean)


27
28
29
30
31
32
33
34
# File 'lib/active_record/connection_adapters/firebird_adapter.rb', line 27

def active?
  return false unless @connection.open?

  @connection.query("SELECT 1 FROM RDB$DATABASE")
  true
rescue
  false
end

#arel_visitorObject



19
20
21
# File 'lib/active_record/connection_adapters/firebird_adapter.rb', line 19

def arel_visitor
  @arel_visitor ||= Arel::Visitors::Firebird.new(self)
end

#disconnect!Object



41
42
43
44
# File 'lib/active_record/connection_adapters/firebird_adapter.rb', line 41

def disconnect!
  super
  @connection.close rescue nil
end

#encodingObject



68
69
70
# File 'lib/active_record/connection_adapters/firebird_adapter.rb', line 68

def encoding
  ActiveRecord::Base.connection_config[:encoding] || ActiveRecord::ConnectionAdapters::FirebirdAdapter::DEFAULT_ENCODING
end

#log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil) ⇒ Object

:doc:



72
73
74
75
# File 'lib/active_record/connection_adapters/firebird_adapter.rb', line 72

def log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil) # :doc:
  sql = sql.encode('UTF-8', encoding) if sql.encoding.to_s == encoding
  super
end

#prefetch_primary_key?(table_name = nil) ⇒ Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/active_record/connection_adapters/firebird_adapter.rb', line 23

def prefetch_primary_key?(table_name = nil)
  true
end

#primary_keys(table_name) ⇒ Object

Raises:

  • (ArgumentError)


50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/active_record/connection_adapters/firebird_adapter.rb', line 50

def primary_keys(table_name)
  raise ArgumentError unless table_name.present?

  names = query_values(<<~SQL, "SCHEMA")
    SELECT
      s.rdb$field_name
    FROM
      rdb$indices i
      JOIN rdb$index_segments s ON i.rdb$index_name = s.rdb$index_name
      LEFT JOIN rdb$relation_constraints c ON i.rdb$index_name = c.rdb$index_name
    WHERE
      i.rdb$relation_name = '#{table_name.upcase}'
      AND c.rdb$constraint_type = 'PRIMARY KEY';
  SQL

  names.map(&:strip).map(&:downcase)
end

#reconnect!Object



36
37
38
39
# File 'lib/active_record/connection_adapters/firebird_adapter.rb', line 36

def reconnect!
  disconnect!
  @connection = ::Fb::Database.connect(@config)
end

#reset!Object



46
47
48
# File 'lib/active_record/connection_adapters/firebird_adapter.rb', line 46

def reset!
  reconnect!
end