提交 311342d8 编写于 作者: J Jeremy Kemper

Correct PostgreSQL primary key sequence detection. #2507

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2680 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 86bdbc3a
*1.12.1*
* Correct PostgreSQL primary key sequence detection. #2507 [tmornini@infomania.com]
* Added support for using limits in eager loads that involve has_many and has_and_belongs_to_many associations
*1.12.0* (October 16th, 2005)
......
......@@ -205,8 +205,8 @@ def default_sequence_name(table_name, pk = 'id')
# Set the sequence to the max value of the table's pk.
def reset_pk_sequence!(table)
sequence, pk = sequence_and_pk_for(table)
if sequence and pk
pk, sequence = pk_and_sequence_for(table)
if pk and sequence
select_value <<-end_sql, 'Reset sequence'
SELECT setval('#{sequence}', (SELECT COALESCE(MAX(#{pk})+(SELECT increment_by FROM #{sequence}), (SELECT min_value FROM #{sequence})) FROM #{table}), false)
end_sql
......@@ -214,19 +214,26 @@ def reset_pk_sequence!(table)
end
# Find a table's primary key and sequence.
def sequence_and_pk_for(table, column = nil)
def pk_and_sequence_for(table)
execute(<<-end_sql, 'Find pk sequence')[0]
SELECT (name.nspname || '.' || seq.relname) AS sequence, attr.attname AS pk
FROM pg_class seq, pg_attribute attr, pg_depend dep, pg_namespace name, pg_constraint cons
WHERE seq.oid = dep.objid
AND seq.relnamespace = name.oid
AND attr.attrelid = dep.refobjid
AND attr.attnum = dep.refobjsubid
AND attr.attrelid = cons.conrelid
AND attr.attnum = cons.conkey[1]
AND cons.contype = 'p'
AND dep.refobjid = '#{table}'::regclass
SELECT attr.attname, (name.nspname || '.' || seq.relname)
FROM pg_class seq,
pg_attribute attr,
pg_depend dep,
pg_namespace name,
pg_constraint cons
WHERE seq.oid = dep.objid
AND seq.relnamespace = name.oid
AND seq.relkind = 'S'
AND attr.attrelid = dep.refobjid
AND attr.attnum = dep.refobjsubid
AND attr.attrelid = cons.conrelid
AND attr.attnum = cons.conkey[1]
AND cons.contype = 'p'
AND dep.refobjid = '#{table}'::regclass
end_sql
rescue
nil
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册