mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
add a truncate method to the connection
it doesn't work on SQLite3 since it doesn't support truncate, but that's OK. If you call truncate on the connection, you're now bound to that database (same as if you use hstore or any other db specific feature).
This commit is contained in:
parent
53a8a7f9cb
commit
9a4e183fe9
6 changed files with 38 additions and 0 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
* Add a truncate method to the connection.
|
||||||
|
|
||||||
* Don't autosave unchanged has_one through records.
|
* Don't autosave unchanged has_one through records.
|
||||||
|
|
||||||
*Alan Kennedy*, *Steve Parrington*
|
*Alan Kennedy*, *Steve Parrington*
|
||||||
|
|
|
@ -83,6 +83,11 @@ module ActiveRecord
|
||||||
exec_query(sql, name, binds)
|
exec_query(sql, name, binds)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Executes the truncate statement.
|
||||||
|
def truncate(table_name, name = nil)
|
||||||
|
raise NotImplementedError
|
||||||
|
end
|
||||||
|
|
||||||
# Executes update +sql+ statement in the context of this connection using
|
# Executes update +sql+ statement in the context of this connection using
|
||||||
# +binds+ as the bind substitutes. +name+ is logged along with
|
# +binds+ as the bind substitutes. +name+ is logged along with
|
||||||
# the executed +sql+ statement.
|
# the executed +sql+ statement.
|
||||||
|
|
|
@ -389,6 +389,10 @@ module ActiveRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def truncate(table_name, name = nil)
|
||||||
|
execute "TRUNCATE TABLE #{quote_table_name(table_name)}", name
|
||||||
|
end
|
||||||
|
|
||||||
def table_exists?(name)
|
def table_exists?(name)
|
||||||
return false unless name.present?
|
return false unless name.present?
|
||||||
return true if tables(nil, nil, name).any?
|
return true if tables(nil, nil, name).any?
|
||||||
|
|
|
@ -255,6 +255,10 @@ module ActiveRecord
|
||||||
@statements.clear
|
@statements.clear
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def truncate(table_name, name = nil)
|
||||||
|
exec_query "TRUNCATE TABLE #{quote_table_name(table_name)}", name, []
|
||||||
|
end
|
||||||
|
|
||||||
# Is this connection alive and ready for queries?
|
# Is this connection alive and ready for queries?
|
||||||
def active?
|
def active?
|
||||||
@connection.query 'SELECT 1'
|
@connection.query 'SELECT 1'
|
||||||
|
|
|
@ -4,6 +4,8 @@ require 'support/connection_helper'
|
||||||
class MysqlConnectionTest < ActiveRecord::TestCase
|
class MysqlConnectionTest < ActiveRecord::TestCase
|
||||||
include ConnectionHelper
|
include ConnectionHelper
|
||||||
|
|
||||||
|
fixtures :comments
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
@subscriber = SQLSubscriber.new
|
@subscriber = SQLSubscriber.new
|
||||||
|
@ -24,6 +26,17 @@ class MysqlConnectionTest < ActiveRecord::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_truncate
|
||||||
|
rows = ActiveRecord::Base.connection.exec_query("select count(*) from comments")
|
||||||
|
count = rows.first.values.first
|
||||||
|
assert_operator count, :>, 0
|
||||||
|
|
||||||
|
ActiveRecord::Base.connection.truncate("comments")
|
||||||
|
rows = ActiveRecord::Base.connection.exec_query("select count(*) from comments")
|
||||||
|
count = rows.first.values.first
|
||||||
|
assert_equal 0, count
|
||||||
|
end
|
||||||
|
|
||||||
def test_no_automatic_reconnection_after_timeout
|
def test_no_automatic_reconnection_after_timeout
|
||||||
assert @connection.active?
|
assert @connection.active?
|
||||||
@connection.update('set @@wait_timeout=1')
|
@connection.update('set @@wait_timeout=1')
|
||||||
|
|
|
@ -8,6 +8,8 @@ module ActiveRecord
|
||||||
class NonExistentTable < ActiveRecord::Base
|
class NonExistentTable < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
|
fixtures :comments
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
@subscriber = SQLSubscriber.new
|
@subscriber = SQLSubscriber.new
|
||||||
|
@ -20,6 +22,14 @@ module ActiveRecord
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_truncate
|
||||||
|
count = ActiveRecord::Base.connection.execute("select count(*) from comments").first['count'].to_i
|
||||||
|
assert_operator count, :>, 0
|
||||||
|
ActiveRecord::Base.connection.truncate("comments")
|
||||||
|
count = ActiveRecord::Base.connection.execute("select count(*) from comments").first['count'].to_i
|
||||||
|
assert_equal 0, count
|
||||||
|
end
|
||||||
|
|
||||||
def test_encoding
|
def test_encoding
|
||||||
assert_not_nil @connection.encoding
|
assert_not_nil @connection.encoding
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue