aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorPratik Naik <pratiknaik@gmail.com>2008-05-20 11:10:38 +0100
committerPratik Naik <pratiknaik@gmail.com>2008-05-20 11:10:38 +0100
commit089251581137b041828a7e6dcbf75ecbef55b4a3 (patch)
tree6f39bcaf9c8c4ca8df27660277ed271eee2a64a0 /activerecord/lib/active_record
parent1b0128c5413ace12dee45e9db328cff866a5bb06 (diff)
downloadrails-089251581137b041828a7e6dcbf75ecbef55b4a3.tar.gz
rails-089251581137b041828a7e6dcbf75ecbef55b4a3.tar.bz2
rails-089251581137b041828a7e6dcbf75ecbef55b4a3.zip
Ensure add_column gives valid error for sqlite. [Gunnar Wolf, Pratik] [#197 state:resolved]
SQLite#add_column executes "VACUUM", which fails if inside a live transaction. This patch ensures a valid exception is raised if add_column is executed within a live transaction for sqlite adapter.
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb4
1 files changed, 4 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
index 8abbc6d0a4..51cfd10e5c 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
@@ -214,6 +214,10 @@ module ActiveRecord
end
def add_column(table_name, column_name, type, options = {}) #:nodoc:
+ if @connection.respond_to?(:transaction_active?) && @connection.transaction_active?
+ raise StatementInvalid, 'Cannot add columns to a SQLite database while inside a transaction'
+ end
+
super(table_name, column_name, type, options)
# See last paragraph on http://www.sqlite.org/lang_altertable.html
execute "VACUUM"