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



74
75
76
# File 'lib/mini_sql_multisite_connection.rb', line 74

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



80
81
82
# File 'lib/mini_sql_multisite_connection.rb', line 80

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



68
69
70
71
72
# File 'lib/mini_sql_multisite_connection.rb', line 68

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

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

#build(sql) ⇒ Object



98
99
100
# File 'lib/mini_sql_multisite_connection.rb', line 98

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

#prepared(condition = true) ⇒ Object

make for a multisite friendly prepared statement cache



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

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

#run(sql, params) ⇒ Object



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

def run(sql, params)
  ActiveSupport::Notifications.instrument(
    "sql.mini_sql",
    sql: sql_fragment(sql, *params),
    name: "MiniSql",
  )

  super
end

#sql_fragment(query, *args) ⇒ Object



112
113
114
115
116
117
118
# File 'lib/mini_sql_multisite_connection.rb', line 112

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

#test_transaction=(transaction) ⇒ Object



56
57
58
# File 'lib/mini_sql_multisite_connection.rb', line 56

def test_transaction=(transaction)
  @test_transaction = transaction
end

#transaction_open?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/mini_sql_multisite_connection.rb', line 51

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