mirror of
https://github.com/DatabaseCleaner/database_cleaner
synced 2023-03-27 23:22:03 -04:00
Merge pull request #283 from Strech/master
PostgreSQL truncation for tables without sequence
This commit is contained in:
commit
3b109a1ca8
3 changed files with 20 additions and 1 deletions
|
|
@ -172,9 +172,15 @@ module DatabaseCleaner
|
||||||
# but then the table is cleaned. In other words, this function tells us if the given table
|
# but then the table is cleaned. In other words, this function tells us if the given table
|
||||||
# was ever inserted into.
|
# was ever inserted into.
|
||||||
def has_been_used?(table)
|
def has_been_used?(table)
|
||||||
|
return has_rows?(table) unless has_sequence?(table)
|
||||||
|
|
||||||
cur_val = select_value("SELECT currval('#{table}_id_seq');").to_i rescue 0
|
cur_val = select_value("SELECT currval('#{table}_id_seq');").to_i rescue 0
|
||||||
cur_val > 0
|
cur_val > 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def has_sequence?(table)
|
||||||
|
select_value("SELECT true FROM pg_class WHERE relname = '#{table}_id_seq';")
|
||||||
|
end
|
||||||
|
|
||||||
def has_rows?(table)
|
def has_rows?(table)
|
||||||
select_value("SELECT true FROM #{table} LIMIT 1;")
|
select_value("SELECT true FROM #{table} LIMIT 1;")
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,13 @@ module ActiveRecord
|
||||||
User.count.should eq 0
|
User.count.should eq 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "truncates the table without id sequence" do
|
||||||
|
2.times { Agent.create }
|
||||||
|
|
||||||
|
connection.truncate_table('agents')
|
||||||
|
Agent.count.should eq 0
|
||||||
|
end
|
||||||
|
|
||||||
it "resets AUTO_INCREMENT index of table" do
|
it "resets AUTO_INCREMENT index of table" do
|
||||||
2.times { User.create }
|
2.times { User.create }
|
||||||
User.delete_all
|
User.delete_all
|
||||||
|
|
@ -48,4 +55,3 @@ module ActiveRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,15 @@ def active_record_load_schema
|
||||||
create_table :users, :force => true do |t|
|
create_table :users, :force => true do |t|
|
||||||
t.integer :name
|
t.integer :name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table :agents, :id => false, :force => true do |t|
|
||||||
|
t.integer :name
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class ::User < ActiveRecord::Base
|
class ::User < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class ::Agent < ActiveRecord::Base
|
||||||
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue