DirtyModel uses a hash to keep track of any changes made to attributes
of an instance. When using the attribute_will_change! method, you must
supply a string and not a symbol or the *_changed? method will break
(because it is looking for the attribute name as a string in the keys
of the underlying hash). To remedy this, I simply made the underlying
hash a HashWithIndifferentAccess so it won't matter if you supply
the attribute name as a symbol or string to attribute_will_change!.
make sure both headers are set before checking for ip spoofing
Remove sqlite specific`supports_autoincrement?` which always defaults to true
Strong parameters should permit nested number as key. Closes #12293
Fixed issue #12327
Migrations Guide: Add semicolon to sentences before code block [ci skip]
Removed where_values_hash from AR::NullRelation

In order to build associated records for owners which has not been saved
need to get where values to use as default attributes.
But for new record owner uses `ActiveRecord::NullRelation` which
override `where_values_hash` to return empty hash stub.

`where_values_hash` is not used to invoke any sql query, but good to
build others chains (even will be never executed) like:

```ruby
  post          = Post.new
  admin_comment = post.admin_comments.build

  assert_equal 'Admin', admin_comment.author
```

Closes #11376, #11676, #11675
Cleanup identitymap logger from LogSubscriber

Also renaming ivar @odd_or_even to @odd
Replace global Hash with TS::Cache.
Use TS::Cache instead of Mutex + Hash.

TS::Cache#compute_if_absent guarantees that only a single thread will get to execute the provided block for a given key.
Make GTG::TransTable thread safe.

From now on only the `[]=` method is allowed to modify the internal states hashes.
Merge pull request #12396 from arthurnn/cleanup_logsubs

Cleanup identitymap logger from LogSubscriber
Merge pull request #11496 from jetthoughts/11376_has_many_assoc_respect_scope_on_build

Removed where_values_hash from AR::NullRelation
Merge pull request #12398 from thedarkone/thread-safety-stuff

Thread safety fixes
Merge pull request #12387 from francisgo/patch-9

Migrations Guide: Add semicolon to sentences before code block [ci skip]
Merge pull request #12354 from kennyj/fix_12293

Closes #12293. Strong parameters should permit nested number as key.
fixes incorrect spelling of `action_on_unpermitted_parameters`

See `actionpack/test/controller/parameters/raise_on_unpermitted_params_test.rb`
Merge pull request #12400 from jaredbeck/fixes_guide_re_action_on_unpermitted_parameters

Fixes incorrect spelling of `action_on_unpermitted_parameters` in guide
Merge pull request #12383 from marclennox/master

Fixed issue #12327
fix `test_sqlite3_mem` test run.

marshalling between processes does not work with an in-memory db.
This breaks the `test_sqlite3_mem` run (see stacktrace below).
After that failure most tests start to fail randomly.

```
/Users/senny/Projects/rails/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb:512:in `table_structure': Could not find table 'posts' (ActiveRecord::StatementInvalid)
	from /Users/senny/Projects/rails/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb:399:in `columns'
	from /Users/senny/Projects/rails/activerecord/lib/active_record/connection_adapters/schema_cache.rb:93:in `block in prepare_default_proc'
	from /Users/senny/Projects/rails/activerecord/lib/active_record/connection_adapters/schema_cache.rb:44:in `yield'
	from /Users/senny/Projects/rails/activerecord/lib/active_record/connection_adapters/schema_cache.rb:44:in `columns'
	from /Users/senny/Projects/rails/activerecord/lib/active_record/model_schema.rb:208:in `columns'
	from /Users/senny/Projects/rails/activerecord/lib/active_record/model_schema.rb:249:in `column_defaults'
	from /Users/senny/Projects/rails/activerecord/lib/active_record/locking/optimistic.rb:171:in `column_defaults'
	from /Users/senny/Projects/rails/activerecord/lib/active_record/core.rb:167:in `initialize'
	from /Users/senny/Projects/rails/activerecord/lib/active_record/inheritance.rb:27:in `new'
	from /Users/senny/Projects/rails/activerecord/lib/active_record/inheritance.rb:27:in `new'
	from /Users/senny/Projects/rails/activerecord/test/cases/base_test.rb:1368:in `block in test_marshal_between_processes'
	from /Users/senny/Projects/rails/activerecord/test/cases/base_test.rb:1366:in `fork'
	from /Users/senny/Projects/rails/activerecord/test/cases/base_test.rb:1366:in `test_marshal_between_processes'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest/test.rb:110:in `block (3 levels) in run'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest/test.rb:208:in `capture_exceptions'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest/test.rb:107:in `block (2 levels) in run'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest/test.rb:260:in `time_it'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest/test.rb:106:in `block in run'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest.rb:296:in `on_signal'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest/test.rb:280:in `with_info_handler'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest/test.rb:105:in `run'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest.rb:268:in `block (2 levels) in run'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest.rb:267:in `each'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest.rb:267:in `block in run'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest.rb:296:in `on_signal'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest.rb:285:in `with_info_handler'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest.rb:266:in `run'
	from /Users/senny/Projects/rails/activesupport/lib/active_support/test_case.rb:31:in `block in __run'
	from /Users/senny/Projects/rails/activesupport/lib/active_support/test_case.rb:31:in `map'
	from /Users/senny/Projects/rails/activesupport/lib/active_support/test_case.rb:31:in `__run'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest.rb:115:in `run'
	from /Users/senny/Projects/rails/.bundle/gems/minitest-5.0.8/lib/minitest.rb:46:in `block in autorun'
```

/cc @tenderlove