diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2006-08-09 03:25:39 +0000 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2006-08-09 03:25:39 +0000 |
commit | d568fb61373074e015083ad39e0dc8168e81733b (patch) | |
tree | 6ec552512558f180e0a84f14ee2045831bffec7e /activerecord/test | |
parent | af7a6e57cd718a6ca2182bfb7ee441ad3c1158fb (diff) | |
download | rails-d568fb61373074e015083ad39e0dc8168e81733b.tar.gz rails-d568fb61373074e015083ad39e0dc8168e81733b.tar.bz2 rails-d568fb61373074e015083ad39e0dc8168e81733b.zip |
PostgreSQL: autodetected sequences work correctly with multiple schemas. Rely on the schema search_path instead of explicitly qualifying the sequence name with its schema. Closes #5280.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4737 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/schema_authorization_test_postgresql.rb | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/activerecord/test/schema_authorization_test_postgresql.rb b/activerecord/test/schema_authorization_test_postgresql.rb new file mode 100644 index 0000000000..f13287658c --- /dev/null +++ b/activerecord/test/schema_authorization_test_postgresql.rb @@ -0,0 +1,75 @@ +require 'abstract_unit' + +class SchemaThing < ActiveRecord::Base +end + +class SchemaAuthorizationTest < Test::Unit::TestCase + self.use_transactional_fixtures = false + + TABLE_NAME = 'schema_things' + COLUMNS = [ + 'id serial primary key', + 'name character varying(50)' + ] + USERS = ['rails_pg_schema_user1', 'rails_pg_schema_user2'] + + def setup + @connection = ActiveRecord::Base.connection + @connection.execute "SET search_path TO '$user',public" + set_session_auth + USERS.each do |u| + @connection.execute "CREATE ROLE #{u}" + @connection.execute "CREATE SCHEMA AUTHORIZATION #{u}" + set_session_auth u + @connection.execute "CREATE TABLE #{TABLE_NAME} (#{COLUMNS.join(',')})" + @connection.execute "INSERT INTO #{TABLE_NAME} (name) VALUES ('#{u}')" + set_session_auth + end + end + + def teardown + set_session_auth + @connection.execute "RESET search_path" + USERS.each do |u| + @connection.execute "DROP SCHEMA #{u} CASCADE" + @connection.execute "DROP ROLE #{u}" + end + end + + def test_schema_invisible + assert_raise(ActiveRecord::StatementInvalid) do + set_session_auth + @connection.execute "SELECT * FROM #{TABLE_NAME}" + end + end + + def test_schema_uniqueness + assert_nothing_raised do + set_session_auth + USERS.each do |u| + set_session_auth u + assert_equal u, @connection.select_value("SELECT name FROM #{TABLE_NAME} WHERE id = 1") + set_session_auth + end + end + end + + def test_sequence_schema_caching + assert_nothing_raised do + USERS.each do |u| + set_session_auth u + st = SchemaThing.new :name => 'TEST1' + st.save! + st = SchemaThing.new :id => 5, :name => 'TEST2' + st.save! + set_session_auth + end + end + end + + private + def set_session_auth auth = nil + @connection.execute "SET SESSION AUTHORIZATION #{auth || 'default'}" + end + +end |