Module: Sequel::ActiveRecordConnection

Defined in:
lib/sequel/extensions/activerecord_connection.rb,
lib/sequel/extensions/activerecord_connection/jdbc.rb,
lib/sequel/extensions/activerecord_connection/utils.rb,
lib/sequel/extensions/activerecord_connection/mysql2.rb,
lib/sequel/extensions/activerecord_connection/oracle.rb,
lib/sequel/extensions/activerecord_connection/sqlite.rb,
lib/sequel/extensions/activerecord_connection/tinytds.rb,
lib/sequel/extensions/activerecord_connection/postgres.rb

Defined Under Namespace

Modules: Jdbc, Mysql2, Oracle, Postgres, Sqlite, Tinytds, Utils

Constant Summary collapse

Error =
Class.new(Sequel::Error)
TRANSACTION_ISOLATION_MAP =
{
  uncommitted:  :read_uncommitted,
  committed:    :read_committed,
  repeatable:   :repeatable_read,
  serializable: :serializable,
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#activerecord_modelObject

Returns the value of attribute activerecord_model.



28
29
30
# File 'lib/sequel/extensions/activerecord_connection.rb', line 28

def activerecord_model
  @activerecord_model
end

Class Method Details

.extended(db) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/sequel/extensions/activerecord_connection.rb', line 16

def self.extended(db)
  db.activerecord_model = ActiveRecord::Base
  db.opts[:test] = false unless db.opts.key?(:test)

  begin
    require "sequel/extensions/activerecord_connection/#{db.adapter_scheme}"
    db.extend Sequel::ActiveRecordConnection.const_get(db.adapter_scheme.capitalize)
  rescue LoadError
    # assume the Sequel adapter already works with Active Record
  end
end

Instance Method Details

#connectObject

Ensure Sequel is not creating its own connection anywhere.

Raises:



31
32
33
# File 'lib/sequel/extensions/activerecord_connection.rb', line 31

def connect(*)
  raise Error, "creating a Sequel connection is not allowed"
end

#extensionObject



35
36
37
38
39
# File 'lib/sequel/extensions/activerecord_connection.rb', line 35

def extension(*)
  super
rescue ActiveRecord::NoDatabaseError
  warn "Sequel database extension #{@loaded_extensions.last.inspect} failed to initialize because there is no database."
end

#log_connection_yield(sql, conn, args = nil) ⇒ Object

Log executed queries into Active Record logger as well.



57
58
59
60
61
# File 'lib/sequel/extensions/activerecord_connection.rb', line 57

def log_connection_yield(sql, conn, args = nil)
  sql += "; #{args.inspect}" if args

  activerecord_log(sql) { super }
end

#synchronizeObject

Avoid calling Sequel’s connection pool, instead use Active Record’s.



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/sequel/extensions/activerecord_connection.rb', line 42

def synchronize(*)
  activerecord_lock do
    conn = activerecord_connection.raw_connection

    if activerecord_connection_class && !conn.is_a?(activerecord_connection_class)
      fail Error, "expected Active Record connection to be a #{activerecord_connection_class}, got #{conn.class}"
    end

    yield conn
  end
ensure
  clear_activerecord_query_cache
end

#timezoneObject

Match database timezone with Active Record.



64
65
66
# File 'lib/sequel/extensions/activerecord_connection.rb', line 64

def timezone
  @timezone || activerecord_timezone
end