mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
remove table quoting in primary_key method
* add/cleanup tests
This commit is contained in:
parent
019c263633
commit
1d7c751bf7
3 changed files with 48 additions and 6 deletions
|
@ -864,7 +864,7 @@ module ActiveRecord
|
|||
|
||||
# Returns just a table's primary key
|
||||
def primary_key(table)
|
||||
row = exec_query(<<-end_sql, 'SCHEMA', [[nil, quote_table_name(table)]]).rows.first
|
||||
row = exec_query(<<-end_sql, 'SCHEMA', [[nil, table]]).rows.first
|
||||
SELECT DISTINCT(attr.attname)
|
||||
FROM pg_attribute attr
|
||||
INNER JOIN pg_depend dep ON attr.attrelid = dep.refobjid AND attr.attnum = dep.refobjsubid
|
||||
|
|
|
@ -74,6 +74,36 @@ module ActiveRecord
|
|||
@connection.default_sequence_name('zomg')
|
||||
end
|
||||
|
||||
def test_pk_and_sequence_for
|
||||
pk, seq = @connection.pk_and_sequence_for('ex')
|
||||
assert_equal 'id', pk
|
||||
assert_equal @connection.default_sequence_name('ex', 'id'), seq
|
||||
end
|
||||
|
||||
def test_pk_and_sequence_for_with_non_standard_primary_key
|
||||
@connection.exec_query('drop table if exists ex')
|
||||
@connection.exec_query('create table ex(code serial primary key)')
|
||||
pk, seq = @connection.pk_and_sequence_for('ex')
|
||||
assert_equal 'code', pk
|
||||
assert_equal @connection.default_sequence_name('ex', 'code'), seq
|
||||
end
|
||||
|
||||
def test_pk_and_sequence_for_returns_nil_if_no_seq
|
||||
@connection.exec_query('drop table if exists ex')
|
||||
@connection.exec_query('create table ex(id integer primary key)')
|
||||
assert_nil @connection.pk_and_sequence_for('ex')
|
||||
end
|
||||
|
||||
def test_pk_and_sequence_for_returns_nil_if_no_pk
|
||||
@connection.exec_query('drop table if exists ex')
|
||||
@connection.exec_query('create table ex(id integer)')
|
||||
assert_nil @connection.pk_and_sequence_for('ex')
|
||||
end
|
||||
|
||||
def test_pk_and_sequence_for_returns_nil_if_table_not_found
|
||||
assert_nil @connection.pk_and_sequence_for('unobtainium')
|
||||
end
|
||||
|
||||
def test_exec_insert_number
|
||||
insert(@connection, 'number' => 10)
|
||||
|
||||
|
|
|
@ -38,10 +38,6 @@ class SchemaTest < ActiveRecord::TestCase
|
|||
set_table_name 'test_schema."Things"'
|
||||
end
|
||||
|
||||
class PrimaryKeyTestHarness < ActiveRecord::Base
|
||||
set_table_name 'test_schema.pktest'
|
||||
end
|
||||
|
||||
def setup
|
||||
@connection = ActiveRecord::Base.connection
|
||||
@connection.execute "CREATE SCHEMA #{SCHEMA_NAME} CREATE TABLE #{TABLE_NAME} (#{COLUMNS.join(',')})"
|
||||
|
@ -189,7 +185,11 @@ class SchemaTest < ActiveRecord::TestCase
|
|||
end
|
||||
|
||||
def test_primary_key_with_schema_specified
|
||||
[ %("#{SCHEMA_NAME}"."#{PK_TABLE_NAME}"), %(#{SCHEMA_NAME}."#{PK_TABLE_NAME}"), %(#{SCHEMA_NAME}."#{PK_TABLE_NAME}")].each do |given|
|
||||
[
|
||||
%("#{SCHEMA_NAME}"."#{PK_TABLE_NAME}"),
|
||||
%(#{SCHEMA_NAME}."#{PK_TABLE_NAME}"),
|
||||
%(#{SCHEMA_NAME}.#{PK_TABLE_NAME})
|
||||
].each do |given|
|
||||
assert_equal 'id', @connection.primary_key(given), "primary key should be found when table referenced as #{given}"
|
||||
end
|
||||
end
|
||||
|
@ -208,6 +208,18 @@ class SchemaTest < ActiveRecord::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_pk_and_sequence_for_with_schema_specified
|
||||
[
|
||||
%("#{SCHEMA_NAME}"."#{PK_TABLE_NAME}"),
|
||||
%(#{SCHEMA_NAME}."#{PK_TABLE_NAME}"),
|
||||
%(#{SCHEMA_NAME}.#{PK_TABLE_NAME})
|
||||
].each do |given|
|
||||
pk, seq = @connection.pk_and_sequence_for(given)
|
||||
assert_equal 'id', pk, "primary key should be found when table referenced as #{given}"
|
||||
assert_equal "#{SCHEMA_NAME}.#{PK_TABLE_NAME}_id_seq", seq, "sequence name should be found when table referenced as #{given}"
|
||||
end
|
||||
end
|
||||
|
||||
def test_extract_schema_and_table
|
||||
{
|
||||
%(table_name) => [nil,'table_name'],
|
||||
|
|
Loading…
Reference in a new issue