diff options
author | Jon Leighton <j@jonathanleighton.com> | 2012-09-28 17:55:35 +0100 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2012-09-28 18:08:14 +0100 |
commit | 144e8691cbfb8bba77f18cfe68d5e7fd48887f5e (patch) | |
tree | 161fc7cc2f7d1905c5ae6a9f761f65fd520116be /activerecord/test/cases/dirty_test.rb | |
parent | f9c63ad56da541fa8fc007c01de64ed623053fd2 (diff) | |
download | rails-144e8691cbfb8bba77f18cfe68d5e7fd48887f5e.tar.gz rails-144e8691cbfb8bba77f18cfe68d5e7fd48887f5e.tar.bz2 rails-144e8691cbfb8bba77f18cfe68d5e7fd48887f5e.zip |
Support for partial inserts.
When inserting new records, only the fields which have been changed
from the defaults will actually be included in the INSERT statement.
The other fields will be populated by the database.
This is more efficient, and also means that it will be safe to
remove database columns without getting subsequent errors in running
app processes (so long as the code in those processes doesn't
contain any references to the removed column).
Diffstat (limited to 'activerecord/test/cases/dirty_test.rb')
-rw-r--r-- | activerecord/test/cases/dirty_test.rb | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/activerecord/test/cases/dirty_test.rb b/activerecord/test/cases/dirty_test.rb index 9a2a5a4e3c..75a52544d3 100644 --- a/activerecord/test/cases/dirty_test.rb +++ b/activerecord/test/cases/dirty_test.rb @@ -3,6 +3,7 @@ require 'models/topic' # For booleans require 'models/pirate' # For timestamps require 'models/parrot' require 'models/person' # For optimistic locking +require 'models/aircraft' class Pirate # Just reopening it, not defining it attr_accessor :detected_changes_in_after_update # Boolean for if changes are detected @@ -550,6 +551,30 @@ class DirtyTest < ActiveRecord::TestCase end end + test "partial insert" do + with_partial_updates Person do + jon = nil + assert_sql(/first_name/) do + jon = Person.create! first_name: 'Jon' + end + + assert ActiveRecord::SQLCounter.log_all.none? { |sql| sql =~ /followers_count/ } + + jon.reload + assert_equal 'Jon', jon.first_name + assert_equal 0, jon.followers_count + assert_not_nil jon.id + end + end + + test "partial insert with empty values" do + with_partial_updates Aircraft do + a = Aircraft.create! + a.reload + assert_not_nil a.id + end + end + private def with_partial_updates(klass, on = true) old = klass.partial_updates? |