add support for setting session variables for postgres connections (as you can in ActiveRecord 4.x)
This commit is contained in:
parent
9ec2ef7f56
commit
887a797ae6
30
lib/active_record_postgres_variables.rb
Normal file
30
lib/active_record_postgres_variables.rb
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# This backports support for the :variables option on postgres database details from ActiveRecord 4 to ActiveRecord 3.
|
||||||
|
require 'active_record'
|
||||||
|
|
||||||
|
if ActiveRecord::VERSION::MAJOR < 4
|
||||||
|
require 'active_record/connection_adapters/postgresql_adapter'
|
||||||
|
|
||||||
|
module ActiveRecordPostgresVariables
|
||||||
|
def configure_connection
|
||||||
|
result = super
|
||||||
|
set_variables
|
||||||
|
result
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_variables
|
||||||
|
return unless variables = @config[:variables]
|
||||||
|
|
||||||
|
# copied from AR 4.2.1
|
||||||
|
variables.map do |k, v|
|
||||||
|
if v == ':default' || v == :default
|
||||||
|
# Sets the value to the global or compile default
|
||||||
|
execute("SET SESSION #{k} TO DEFAULT", 'SCHEMA')
|
||||||
|
elsif !v.nil?
|
||||||
|
execute("SET SESSION #{k} TO #{quote(v)}", 'SCHEMA')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(ActiveRecordPostgresVariables)
|
||||||
|
end
|
|
@ -1,4 +1,8 @@
|
||||||
|
# these things need to go first
|
||||||
require 'conditional_skylight'
|
require 'conditional_skylight'
|
||||||
|
require 'active_record_postgres_variables'
|
||||||
|
|
||||||
|
# now actually load travis
|
||||||
require 'travis'
|
require 'travis'
|
||||||
require 'travis/model'
|
require 'travis/model'
|
||||||
require 'travis/support/amqp'
|
require 'travis/support/amqp'
|
||||||
|
|
12
spec/active_record_postgres_variables_spec.rb
Normal file
12
spec/active_record_postgres_variables_spec.rb
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe "ActiveRecordPostgresVariables" do
|
||||||
|
let(:variables) {{ foo: 'bar' }}
|
||||||
|
let(:database_options) { Travis.config.database.merge(variables: variables) }
|
||||||
|
let(:base) { Class.new(ActiveRecord::Base) }
|
||||||
|
|
||||||
|
it "passes on variables to postgres connections" do
|
||||||
|
base.establish_connection(database_options)
|
||||||
|
expect { base.table_exists? }.to raise_error(ActiveRecord::StatementInvalid, /unrecognized configuration parameter "foo"/)
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user