1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

pg, default_sequence_name needs to return a string.

This is a reacon to d6c1205584 (commitcomment-7502487)
This backwards incompatibility was introduced with d6c12055 to fix #7516.
However both `connection.default_sequence_name` and `model.sequence_name` are public API.
The PostgreSQL adapter should honor the interface and return strings.

/cc @matthewd @chancancode
This commit is contained in:
Yves Senn 2014-08-25 11:58:12 +02:00
parent 5cdd02ddd4
commit 3fe54b3a05
3 changed files with 12 additions and 8 deletions

View file

@ -1,3 +1,7 @@
* `default_sequence_name` from the PostgreSQL adapter returns a `String`.
*Yves Senn*
* Fixed a regression where whitespaces were stripped from DISTINCT queries in
PostgreSQL.

View file

@ -281,9 +281,9 @@ module ActiveRecord
def default_sequence_name(table_name, pk = nil) #:nodoc:
result = serial_sequence(table_name, pk || 'id')
return nil unless result
Utils.extract_schema_qualified_name(result)
Utils.extract_schema_qualified_name(result).to_s
rescue ActiveRecord::StatementInvalid
PostgreSQL::Name.new(nil, "#{table_name}_#{pk || 'id'}_seq")
PostgreSQL::Name.new(nil, "#{table_name}_#{pk || 'id'}_seq").to_s
end
def serial_sequence(table, column)

View file

@ -134,18 +134,18 @@ module ActiveRecord
end
def test_default_sequence_name
assert_equal PostgreSQL::Name.new('public', 'accounts_id_seq'),
assert_equal 'public.accounts_id_seq',
@connection.default_sequence_name('accounts', 'id')
assert_equal PostgreSQL::Name.new('public', 'accounts_id_seq'),
assert_equal 'public.accounts_id_seq',
@connection.default_sequence_name('accounts')
end
def test_default_sequence_name_bad_table
assert_equal PostgreSQL::Name.new(nil, 'zomg_id_seq'),
assert_equal 'zomg_id_seq',
@connection.default_sequence_name('zomg', 'id')
assert_equal PostgreSQL::Name.new(nil, 'zomg_id_seq'),
assert_equal 'zomg_id_seq',
@connection.default_sequence_name('zomg')
end
@ -153,7 +153,7 @@ module ActiveRecord
with_example_table do
pk, seq = @connection.pk_and_sequence_for('ex')
assert_equal 'id', pk
assert_equal @connection.default_sequence_name('ex', 'id'), seq
assert_equal @connection.default_sequence_name('ex', 'id'), seq.to_s
end
end
@ -161,7 +161,7 @@ module ActiveRecord
with_example_table 'code serial primary key' do
pk, seq = @connection.pk_and_sequence_for('ex')
assert_equal 'code', pk
assert_equal @connection.default_sequence_name('ex', 'code'), seq
assert_equal @connection.default_sequence_name('ex', 'code'), seq.to_s
end
end