diff options
author | Andrew White <pixeltrix@users.noreply.github.com> | 2017-01-16 17:26:27 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-16 17:26:27 +0000 |
commit | c486c3a1233d7663371447dec560ced93081d151 (patch) | |
tree | 5ff8b6799869693b0916b9d3c50119e767d53422 /activerecord/lib | |
parent | bc33fe551251cbbcce62d78f240746357c979fb8 (diff) | |
parent | 974f5fbbc2cc473541492bcd21c4128cbfa276a1 (diff) | |
download | rails-c486c3a1233d7663371447dec560ced93081d151.tar.gz rails-c486c3a1233d7663371447dec560ced93081d151.tar.bz2 rails-c486c3a1233d7663371447dec560ced93081d151.zip |
Merge pull request #27701 from kamipo/translate_foreign_key_violation
Translate Foreign Key violation to the specific exception for SQLite3 adapter
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb index ec44d020c2..2e3419991e 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb @@ -95,6 +95,8 @@ module ActiveRecord @active = nil @statements = StatementPool.new(self.class.type_cast_config_to_integer(config[:statement_limit])) + + configure_connection end def supports_ddl_transactions? @@ -185,6 +187,19 @@ module ActiveRecord true end + # REFERENTIAL INTEGRITY ==================================== + + def disable_referential_integrity # :nodoc: + old = select_value("PRAGMA foreign_keys") + + begin + execute("PRAGMA foreign_keys = OFF") + yield + ensure + execute("PRAGMA foreign_keys = #{old}") + end + end + #-- # DATABASE STATEMENTS ====================================== #++ @@ -525,6 +540,8 @@ module ActiveRecord RecordNotUnique.new(message) when /.* may not be NULL/, /NOT NULL constraint failed: .*/ NotNullViolation.new(message) + when /FOREIGN KEY constraint failed/i + InvalidForeignKey.new(message) else super end @@ -574,6 +591,10 @@ module ActiveRecord def create_table_definition(*args) SQLite3::TableDefinition.new(*args) end + + def configure_connection + execute("PRAGMA foreign_keys = ON", "SCHEMA") + end end end end |