Class: MiniSqlMultisiteConnection
- Inherits:
-
MiniSql::ActiveRecordPostgres::Connection
- Object
- MiniSql::ActiveRecordPostgres::Connection
- MiniSqlMultisiteConnection
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
.instance ⇒ Object
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_connection ⇒ Object
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
51
52
53
|
# File 'lib/mini_sql_multisite_connection.rb', line 51
def transaction_open?
ActiveRecord::Base.connection.transaction_open?
end
|