Class: ActiveRecord::ConnectionAdapters::ArFirebirdAdapter

Constant Summary collapse

ADAPTER_NAME =
"ArFirebird".freeze
DEFAULT_ENCODING =
"Windows-1252".freeze
NATIVE_DATABASE_TYPES =
{
  primary_key: 'integer not null primary key',
  string:      { name: 'varchar', limit: 255 },
  text:        { name: 'blob sub_type text' },
  integer:     { name: 'integer' },
  float:       { name: 'float' },
  decimal:     { name: 'decimal' },
  datetime:    { name: 'timestamp' },
  timestamp:   { name: 'timestamp' },
  date:        { name: 'date' },
  binary:      { name: 'blob' },
  boolean:     { name: ActiveRecord::ConnectionAdapters::ArFirebirdAdapter.boolean_domain[:name] }
}

Class Attribute Summary collapse

Instance Method Summary collapse

Methods included from ActiveRecord::ConnectionAdapters::ArFirebird::Quoting

#lookup_cast_type_from_column, #quote_column_name, #quoted_date, #quoted_false, #quoted_true, #unquoted_false, #unquoted_true

Methods included from ActiveRecord::ConnectionAdapters::ArFirebird::SchemaStatements

#add_column, #change_column, #foreign_keys, #indexes, #remove_index, #tables, #views

Methods included from ActiveRecord::ConnectionAdapters::ArFirebird::DatabaseStatements

#begin_db_transaction, #commit_db_transaction, #create_sequence, #create_table, #default_sequence_name, #drop_sequence, #drop_table, #exec_query, #exec_rollback_db_transaction, #execute, #next_sequence_value, #remove_column, #sequence_exists?

Methods included from ActiveRecord::ConnectionAdapters::ArFirebird::DatabaseLimits

#column_name_length, #in_clause_length, #index_name_length, #indexes_per_table, #sql_query_length, #table_alias_length, #table_name_length

Methods inherited from AbstractAdapter

#combine_bind_parameters

Class Attribute Details

.boolean_domainObject

Returns the value of attribute boolean_domain.



28
29
30
# File 'lib/active_record/connection_adapters/ar_firebird_adapter.rb', line 28

def boolean_domain
  @boolean_domain
end

Instance Method Details

#active?Boolean

Returns:

  • (Boolean)


57
58
59
60
61
62
63
64
# File 'lib/active_record/connection_adapters/ar_firebird_adapter.rb', line 57

def active?
  return false unless @connection.open?

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

#arel_visitorObject



49
50
51
# File 'lib/active_record/connection_adapters/ar_firebird_adapter.rb', line 49

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

#disconnect!Object



71
72
73
74
# File 'lib/active_record/connection_adapters/ar_firebird_adapter.rb', line 71

def disconnect!
  super
  @connection.close rescue nil
end

#encodingObject



98
99
100
# File 'lib/active_record/connection_adapters/ar_firebird_adapter.rb', line 98

def encoding
  @connection.encoding
end

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

:doc:



102
103
104
105
# File 'lib/active_record/connection_adapters/ar_firebird_adapter.rb', line 102

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

#native_database_typesObject



45
46
47
# File 'lib/active_record/connection_adapters/ar_firebird_adapter.rb', line 45

def native_database_types
  NATIVE_DATABASE_TYPES
end

#prefetch_primary_key?(table_name = nil) ⇒ Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/active_record/connection_adapters/ar_firebird_adapter.rb', line 53

def prefetch_primary_key?(table_name = nil)
  true
end

#primary_keys(table_name) ⇒ Object

Raises:

  • (ArgumentError)


80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/active_record/connection_adapters/ar_firebird_adapter.rb', line 80

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



66
67
68
69
# File 'lib/active_record/connection_adapters/ar_firebird_adapter.rb', line 66

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

#reset!Object



76
77
78
# File 'lib/active_record/connection_adapters/ar_firebird_adapter.rb', line 76

def reset!
  reconnect!
end

#supports_foreign_keys?Boolean

Returns:

  • (Boolean)


107
108
109
# File 'lib/active_record/connection_adapters/ar_firebird_adapter.rb', line 107

def supports_foreign_keys?
  true
end