diff --git a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb index ab5c9b822f39acb6161f81c1d4765bbb260cc5b4..8038bc7051c29a51de37680014035efea3b371ce 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb @@ -134,14 +134,7 @@ def quote_column_name(name) #:nodoc: # DATABASE STATEMENTS ====================================== def execute(sql, name = nil) #:nodoc: - log(sql, name) { @connection.execute(sql) } - rescue ActiveRecord::StatementInvalid => exception - if exception.message =~ /database schema has changed/ - reconnect! - retry - else - raise - end + catch_schema_changes { log(sql, name) { @connection.execute(sql) } } end def update(sql, name = nil) #:nodoc: @@ -179,15 +172,15 @@ def select_one(sql, name = nil) #:nodoc: def begin_db_transaction #:nodoc: - @connection.transaction + catch_schema_changes { @connection.transaction } end def commit_db_transaction #:nodoc: - @connection.commit + catch_schema_changes { @connection.commit } end def rollback_db_transaction #:nodoc: - @connection.rollback + catch_schema_changes { @connection.rollback } end @@ -337,6 +330,17 @@ def copy_table_contents(from, to, columns, rename = {}) #:nodoc: @connection.execute sql end end + + def catch_schema_changes + return yield + rescue ActiveRecord::StatementInvalid => exception + if exception.message =~ /database schema has changed/ + reconnect! + retry + else + raise + end + end end class SQLite2Adapter < SQLiteAdapter # :nodoc: