Skip to content

Commit

Permalink
pg, default_sequence_name needs to return a string.
Browse files Browse the repository at this point in the history
This is a reacon to d6c1205#commitcomment-7502487
This backwards incompatibility was introduced with d6c1205 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
  • Loading branch information
senny committed Aug 25, 2014
1 parent 5cdd02d commit 3fe54b3
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 8 deletions.
4 changes: 4 additions & 0 deletions activerecord/CHANGELOG.md
@@ -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.

Expand Down
Expand Up @@ -281,9 +281,9 @@ def client_min_messages=(level)
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)
Expand Down
Expand Up @@ -134,34 +134,34 @@ def test_serial_sequence
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

def test_pk_and_sequence_for
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

def test_pk_and_sequence_for_with_non_standard_primary_key
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

Expand Down

0 comments on commit 3fe54b3

Please sign in to comment.