Module: Sequel::ActiveRecordConnection

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

Defined Under Namespace

Modules: Jdbc, Mysql2, Postgres, Sqlite

Constant Summary collapse

Error =
Class.new(Sequel::Error)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#activerecord_modelObject

Returns the value of attribute activerecord_model.



17
18
19
# File 'lib/sequel/extensions/activerecord_connection.rb', line 17

def activerecord_model
  @activerecord_model
end

Class Method Details

.extended(db) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
# File 'lib/sequel/extensions/activerecord_connection.rb', line 5

def self.extended(db)
  db.activerecord_model = ActiveRecord::Base
  db.timezone = ActiveRecord::Base.default_timezone

  begin
    require "sequel/extensions/activerecord_connection/#{db.adapter_scheme}"
    db.extend Sequel::ActiveRecordConnection.const_get(db.adapter_scheme.capitalize)
  rescue LoadError
    fail Error, "unsupported adapter: #{db.adapter_scheme}"
  end
end

Instance Method Details

#connectObject

Ensure Sequel is not creating its own connection anywhere.

Raises:



20
21
22
# File 'lib/sequel/extensions/activerecord_connection.rb', line 20

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

#in_transaction?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/sequel/extensions/activerecord_connection.rb', line 53

def in_transaction?(*)
  activerecord_connection.transaction_open?
end

#synchronizeObject

Avoid calling Sequel’s connection pool, instead use ActiveRecord.



64
65
66
67
68
69
70
71
72
# File 'lib/sequel/extensions/activerecord_connection.rb', line 64

def synchronize(*)
  if ActiveRecord.version >= Gem::Version.new("5.1.0")
    activerecord_connection.lock.synchronize do
      yield activerecord_raw_connection
    end
  else
    yield activerecord_raw_connection
  end
end

#transaction(options = {}) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/sequel/extensions/activerecord_connection.rb', line 24

def transaction(options = {})
  savepoint      = options.delete(:savepoint)
  rollback       = options.delete(:rollback)
  auto_savepoint = options.delete(:auto_savepoint)
  server         = options.delete(:server)

  fail Error, "#{options} transaction options are currently not supported" unless options.empty?

  if in_transaction?
    requires_new = savepoint || Thread.current[:sequel_activerecord_auto_savepoint]
  else
    requires_new = true
  end

  activerecord_model.transaction(requires_new: requires_new) do
    begin
      Thread.current[:sequel_activerecord_auto_savepoint] = true if auto_savepoint
      yield
    rescue Sequel::Rollback => exception
      raise if rollback == :reraise
      raise ActiveRecord::Rollback, exception.message, exception.backtrace
    ensure
      Thread.current[:sequel_activerecord_auto_savepoint] = nil if auto_savepoint
    end

    raise ActiveRecord::Rollback if rollback == :always
  end
end