Class: MiniSqlMultisiteConnection

Inherits:
MiniSql::ActiveRecordPostgres::Connection
  • Object
show all
Defined in:
lib/mini_sql_multisite_connection.rb

Defined Under Namespace

Classes: AfterCommitWrapper, CustomBuilder, ParamEncoder

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.instanceObject



76
77
78
# File 'lib/mini_sql_multisite_connection.rb', line 76

def self.instance
  new(nil, param_encoder: ParamEncoder.new)
end

Instance Method Details

#active_record_connectionObject

we need a tiny adapter here so we always run against the correct multisite connection



82
83
84
# File 'lib/mini_sql_multisite_connection.rb', line 82

def active_record_connection
  ActiveRecord::Base.connection
end

#after_commit(&blk) ⇒ Object

Allows running arbitrary code after the current transaction has been committed. Works with nested ActiveRecord transaction blocks. Useful for scheduling sidekiq jobs. If not currently in a transaction, will execute immediately



70
71
72
73
74
# File 'lib/mini_sql_multisite_connection.rb', line 70

def after_commit(&blk)
  return blk.call if !transaction_open?

  ActiveRecord::Base.connection.add_transaction_record(AfterCommitWrapper.new(&blk))
end

#build(sql) ⇒ Object



100
101
102
# File 'lib/mini_sql_multisite_connection.rb', line 100

def build(sql)
  CustomBuilder.new(self, sql)
end

#prepared(condition = true) ⇒ Object

make for a multisite friendly prepared statement cache



87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/mini_sql_multisite_connection.rb', line 87

def prepared(condition = true)
  if condition
    conn = raw_connection.instance_variable_get(:@mini_sql_prepared_connection)
    if !conn
      conn = MiniSql::Postgres::PreparedConnection.new(self)
      raw_connection.instance_variable_set(:@mini_sql_prepared_connection, conn)
    end
    conn
  else
    self
  end
end

#sql_fragment(query, *args) ⇒ Object



104
105
106
107
108
109
110
# File 'lib/mini_sql_multisite_connection.rb', line 104

def sql_fragment(query, *args)
  if args.length > 0
    param_encoder.encode(query, *args)
  else
    query
  end
end

#test_transaction=(transaction) ⇒ Object



58
59
60
# File 'lib/mini_sql_multisite_connection.rb', line 58

def test_transaction=(transaction)
  @test_transaction = transaction
end

#transaction_open?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/mini_sql_multisite_connection.rb', line 53

def transaction_open?
  ActiveRecord::Base.connection.transaction_open?
end