diff options
author | Yves Senn <yves.senn@gmail.com> | 2014-03-20 13:38:44 +0100 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2014-03-20 13:38:44 +0100 |
commit | 850f59fb29fac7a0cbe91bb4b70f0cd02cac143e (patch) | |
tree | c9aee357d280534302b6ac3e59d0dbf1ad4530cf /activerecord/test | |
parent | 656f4f29fa497a13d13b39b12506e0505072b472 (diff) | |
parent | 0110d7b714a6ecc810a38ef5a27b66ec321995e5 (diff) | |
download | rails-850f59fb29fac7a0cbe91bb4b70f0cd02cac143e.tar.gz rails-850f59fb29fac7a0cbe91bb4b70f0cd02cac143e.tar.bz2 rails-850f59fb29fac7a0cbe91bb4b70f0cd02cac143e.zip |
Merge pull request #12955 from joshwilliams/master
Postgres schema: Constrain sequence search classid
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb b/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb index 019406dd84..de7acdf3ab 100644 --- a/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb +++ b/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb @@ -176,6 +176,51 @@ module ActiveRecord assert_nil @connection.pk_and_sequence_for('unobtainium') end + def test_pk_and_sequence_for_with_collision_pg_class_oid + @connection.exec_query('create table ex(id serial primary key)') + @connection.exec_query('create table ex2(id serial primary key)') + + correct_depend_record = [ + "'pg_class'::regclass", + "'ex_id_seq'::regclass", + '0', + "'pg_class'::regclass", + "'ex'::regclass", + '1', + "'a'" + ] + + collision_depend_record = [ + "'pg_attrdef'::regclass", + "'ex2_id_seq'::regclass", + '0', + "'pg_class'::regclass", + "'ex'::regclass", + '1', + "'a'" + ] + + @connection.exec_query( + "DELETE FROM pg_depend WHERE objid = 'ex_id_seq'::regclass AND refobjid = 'ex'::regclass AND deptype = 'a'" + ) + @connection.exec_query( + "INSERT INTO pg_depend VALUES(#{collision_depend_record.join(',')})" + ) + @connection.exec_query( + "INSERT INTO pg_depend VALUES(#{correct_depend_record.join(',')})" + ) + + seq = @connection.pk_and_sequence_for('ex').last + assert_equal 'ex_id_seq', seq + + @connection.exec_query( + "DELETE FROM pg_depend WHERE objid = 'ex2_id_seq'::regclass AND refobjid = 'ex'::regclass AND deptype = 'a'" + ) + ensure + @connection.exec_query('DROP TABLE IF EXISTS ex') + @connection.exec_query('DROP TABLE IF EXISTS ex2') + end + def test_exec_insert_number with_example_table do insert(@connection, 'number' => 10) |