diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 6ebfc9e8a44898f2a0b566189d06b7588146feed..a16e2bef02aeb94a5edb9fd656074a0ca36679b2 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Added timeout option to SQLite3 configurations to deal more gracefully with SQLite3::BusyException, now the connection can instead retry for x seconds to see if the db clears up before throwing that exception #6126 [wreese@gmail.com] + * Added update_attributes! which uses save! to raise an exception if a validation error prevents saving #6192 [jonathan] * Deprecated add_on_boundary_breaking (use validates_length_of instead) #6292 [BobSilva] diff --git a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb index 308a21191da6c12a87a53a80b68707f28b03de01..db9aa2e717094b76b955a4dc4cba67443bfe8ed8 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb @@ -19,6 +19,9 @@ def sqlite3_connection(config) # :nodoc: :results_as_hash => true, :type_translation => false ) + + db.busy_timeout(config[:timeout]) unless config[:timeout].nil? + ConnectionAdapters::SQLiteAdapter.new(db, logger) end diff --git a/activerecord/test/connections/native_sqlite3/connection.rb b/activerecord/test/connections/native_sqlite3/connection.rb index 008ea686d6ce86af552c1ca7e1e0c8013ff421e9..6dbb2b98c1b54af5d90a66d560832c989a99497a 100644 --- a/activerecord/test/connections/native_sqlite3/connection.rb +++ b/activerecord/test/connections/native_sqlite3/connection.rb @@ -11,7 +11,7 @@ class SqliteError < StandardError sqlite_test_db2 = "#{BASE_DIR}/fixture_database_2.sqlite3" def make_connection(clazz, db_file, db_definitions_file) - ActiveRecord::Base.configurations = { clazz.name => { :adapter => 'sqlite3', :database => db_file } } + ActiveRecord::Base.configurations = { clazz.name => { :adapter => 'sqlite3', :database => db_file, :timeout => 5000 } } unless File.exist?(db_file) puts "SQLite3 database not found at #{db_file}. Rebuilding it." sqlite_command = %Q{sqlite3 #{db_file} "create table a (a integer); drop table a;"} diff --git a/railties/CHANGELOG b/railties/CHANGELOG index 4ef9915ff5ad655e67aa13baf744c4dedcbe0179..8ea81f7cd2189e471e74c97075deb26f2e16d0c2 100644 --- a/railties/CHANGELOG +++ b/railties/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Added default timeout setting of 5 seconds to SQLite3 database.yml configurations [DHH] + * Added generated attribute options to script/generate model, like the one found in scaffold_resource and resource [DHH]. Examples: ./script/generate model post title:string created_on:date body:text published:boolean diff --git a/railties/configs/databases/sqlite3.yml b/railties/configs/databases/sqlite3.yml index 6f8cbaf18fe9e238951ea5398878098b77981b96..60d8563a427983f3e16bedb6698833bfe7893ca9 100644 --- a/railties/configs/databases/sqlite3.yml +++ b/railties/configs/databases/sqlite3.yml @@ -3,6 +3,7 @@ development: adapter: sqlite3 database: db/development.sqlite3 + timeout: 5000 # Warning: The database defined as 'test' will be erased and # re-generated from your development database when you run 'rake'. @@ -10,7 +11,9 @@ development: test: adapter: sqlite3 database: db/test.sqlite3 + timeout: 5000 production: adapter: sqlite3 database: db/production.sqlite3 + timeout: 5000