aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2017-09-11 05:24:37 +0900
committerRyuta Kamizono <kamipo@gmail.com>2017-09-18 08:36:51 +0900
commita714117736530871528857c5adfb5520e387aca5 (patch)
tree195053dbdff012cccef5653472aa98fdf4918fcf /activerecord/lib/active_record
parent9b53f74d897d346f44caae7b0cffcd900f986259 (diff)
downloadrails-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.rb9
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