diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2017-09-11 05:24:37 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2017-09-18 08:36:51 +0900 |
commit | a714117736530871528857c5adfb5520e387aca5 (patch) | |
tree | 195053dbdff012cccef5653472aa98fdf4918fcf /activerecord/lib/active_record | |
parent | 9b53f74d897d346f44caae7b0cffcd900f986259 (diff) | |
download | rails-a714117736530871528857c5adfb5520e387aca5.tar.gz rails-a714117736530871528857c5adfb5520e387aca5.tar.bz2 rails-a714117736530871528857c5adfb5520e387aca5.zip |
Fix collided sequence name detection
If collided named sequence already exists, newly created serial column
will generate alternative sequence name. Fix sequence name detection to
allow the alternative names.
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/postgresql/column.rb | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/column.rb b/activerecord/lib/active_record/connection_adapters/postgresql/column.rb index 1b67cee24b..ff95fa4a0e 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/column.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/column.rb @@ -10,8 +10,15 @@ module ActiveRecord def serial? return unless default_function - %r{\Anextval\('"?#{table_name}_#{name}_seq"?'::regclass\)\z} === default_function + if %r{\Anextval\('"?(?<sequence_name>.+_(?<suffix>seq\d*))"?'::regclass\)\z} =~ default_function + sequence_name_from_parts(table_name, name, suffix) == sequence_name + end end + + private + def sequence_name_from_parts(table_name, column_name, suffix) + "#{table_name}_#{column_name}_#{suffix}" + end end end end |