Commit Graph

15394 Commits

Author SHA1 Message Date
eileencodes
0d8d64e9d0 Add regression test for foreign key schema dump caching
If you had a foreign key set and then decided to add `on_delete:
:cascade` later in another migration that migration would run but
wouldn't refresh the schema dump.

The reason for this was because `create_table_info` caches the statement
and sets it to be the same as the original declaration for the foreign
key (without the `on_delete: :cascade`.

PR #25307 ended up fixing this bug because it removes the check for
`create_table_info` and relies on reading from `information_schema`. The
fix however was intended to patch another bug. The reason this fixes the
issue is we're no longer parsing the regex from the cached
`create_table_info`.

This regression test is to ensure that the issue does not return if we
for some reason go back to using `create_table_info` to set the foreign
keys.
2016-07-01 11:43:46 -04:00
Eileen M. Uchitelle
4abd389ef7 Merge pull request #25307 from kamipo/extract_foreign_key_action_from_information_schema
Extract foreign key action from `information_schema`
2016-07-01 11:30:40 -04:00
Ryuta Kamizono
5d3a0b14c0 Pass pk: false to connection.insert explicitly if do not have a primary key
Because causing an extra query by `sql_for_insert` for guessing a
primary key.
https://github.com/rails/rails/blob/v5.0.0/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb#L121-L125
2016-07-01 16:10:27 +09:00
Kevin McPhillips
a023fd6657 Do not specal case inspecting associated arrays of over 10 elements, preventing infinite looping in some cases. 2016-06-29 10:31:09 -04:00
Sean Griffin
160cc33179 Don't attempt to clear active connections unless we'ere connected
Right now with this middleware we are likely always connected, but I'm
hoping to change that soon. This is an easy change to pull out on its
own.
2016-06-29 09:56:19 -04:00
Sean Griffin
4565de0da1 Remove unused ActiveRecord::Base.connection_id
This method appears to have been partially used in connection pool
caching, but it was introduced without much reasoning or any tests. One
edge case test was added later on, but it was focused on implementation
details. This method is no longer used outside of tests, and as such is
removed.
2016-06-29 09:50:52 -04:00
Rafael França
a215642828 Merge pull request #25364 from kamipo/fix_serialize_for_date_type
Fix `Type::Date#serialize` to return a date object correctly
2016-06-28 23:33:31 -03:00
Alex Kitchens
d6f0a1a603 [ci skip] Clarify DDL term in ActiveRecord::Transactions 2016-06-27 09:19:36 -05:00
Ryuta Kamizono
59c218ea9b Remove unnecessary assert_valid_default
This was added at c7c3f73 but it never raised because MySQL cannot
create text/blob columns with a default value.
2016-06-25 21:17:27 +09:00
Jon Moss
afd96b6585
nodoc ActiveRecord::AttributeSet::YAMLEncoder
As mentioned in 7b86ea6715ee987e61a7f3bd8e72b1bbfcfbbbe7, this is an
internal class.

[ci skip]

r? @sgrif
2016-06-24 13:15:55 -04:00
Jon Moss
7b86ea6715 Revert "[ci skip] better docs for ActiveRecord::AttributeSet::YAMLEncoder#decode"
This reverts commit 7ea502ae141fc26b736c7a73bdf7a676b1f9fc87, per
internal discussion with @sgrif -- this is documenting the
implementation of a class that isn't intended to be public API.
2016-06-24 12:45:03 -04:00
Sean Griffin
3827049872 Merge pull request #25506 from y-yagi/return_correct_from_enum_type
return correct type from `EnumType`
2016-06-24 06:16:46 -04:00
Benjamin Quorning
763de2ac1c Optimize ActiveRecord::Result#last
If you only want the last element of a result set, there's no need to create all
of hash_rows. Also, add a test.
2016-06-24 11:43:48 +02:00
Benjamin Quorning
af834fb2c0 Remove MySQL::DatabaseStatements#select_one
The implementation from abstract/database_statements.rb seems to work just fine.
And with ActiveRecord::Result now implementing an optimized #first method, the
performance concerns previously addressed in
bf79aa4fc1
should not be an issue.
2016-06-24 11:43:23 +02:00
Benjamin Quorning
e292ce8a4f Add ActiveRecord::Result#first
When you only need the first element of a result set, you shouldn't need to
instantiate all of hash_rows.
2016-06-24 11:43:22 +02:00
yuuji.yaginuma
8f290092f0 return correct type from EnumType 2016-06-24 17:43:25 +09:00
Edouard CHIN
3aae8ab6b0 Removed a forgotten with_exclusive_scope test:
- `with_exclusive_scope` was removed in this commit d242e467819a428ad7e302968e4c9fa1e26d9326
2016-06-24 00:30:42 -04:00
Alex Kitchens
415856663d [ci skip] Update Documentation on ActiveRecord::Inheritance 2016-06-23 08:12:17 -05:00
David Elliott
7ea502ae14 [ci skip] better docs for ActiveRecord::AttributeSet::YAMLEncoder#decode 2016-06-21 16:37:52 -04:00
Alex Kitchens
33c78c3787 [ci skip] fix typo in ActiveRecord::ConnectionHandling 2016-06-20 08:49:59 -05:00
Arthur Nogueira Neves
6d4df1d330 Merge pull request #23301 from ppworks/improve_mysqldump
Improve mysqldump
2016-06-17 12:23:50 -04:00
Jon Moss
80e819586b
Move code style configuration files to root directory
I think these are meant to be in the root directory, not in
`/activerecord`? 😬

r? @sgrif

[ci skip]
2016-06-16 22:17:46 -04:00
Arthur Nogueira Neves
267489a103 Merge pull request #24773 from ralinc/fix-silent-fail-on-psql-command
PostgreSQL: Fix db:structure:load silent failure on SQL error
2016-06-16 20:07:27 -04:00
Ryuta Kamizono
10b81fb51a Fix Type::Date#serialize to return a date object correctly
Currently `Type::Date#serialize` does not cast a value to a date object.
It should be cast to a date object for finding by date column correctly
working.

Fixes #25354.
2016-06-16 08:04:16 +09:00
Sean Griffin
7980b31bc6 Merge pull request #25271 from kamipo/prevent_range_error_for_exists
Prevent `RangeError` for `FinderMethods#exists?`
2016-06-15 18:22:34 -04:00
Ryuta Kamizono
1cf467b7a3 Prevent RangeError for FinderMethods#exists?
`FinderMethods#exists?` should return a boolean rather than raising an
exception.

`UniquenessValidator#build_relation` catches a `RangeError` because it
includes type casting due to a string value truncation. But a string
value truncation was removed at #23523 then type casting in
`build_relation` is no longer necessary. aa06231 removes type casting in
`build_relation` then a `RangeError` moves to `relation.exists?`.

This change will remove the catching a `RangeError`.
2016-06-16 06:25:37 +09:00
Rafael França
d4514e3be1 Merge pull request #25339 from prathamesh-sonpatki/reuse-validate-index-length
Reuse validate index length
2016-06-15 15:28:25 -04:00
Arthur Neves
1f63cd9190
Fix postgresql query_cache test 2016-06-14 13:06:30 -04:00
Arthur Neves
009b2a5434
Respect the current connected? method when calling cache
Before we enable query caching we check if the connection is
connected. Before this fix we were always checking against the main
connection, and not the model connection.
2016-06-14 12:37:50 -04:00
Arthur Neves
596669cfac
Remove not needed line on test 2016-06-14 12:37:50 -04:00
Rafael Mendonça França
f27a932d6f
Fix error message to talk about the scale not precision of the type
Fixes #25391
2016-06-13 13:01:32 -04:00
Rafael Mendonça França
e29eb9feb5
Merge pull request #24756 from gsamokovarov/always-inherit-from-application-record
Always genererate models with ApplicationRecord parent
2016-06-13 11:25:55 -04:00
Rafael França
a9734859ce Merge pull request #25319 from morgoth/generate-application-record-first
Generate application_record.rb file before model file
2016-06-13 11:24:33 -04:00
Sean Griffin
1efc81ba8f Merge pull request #25374 from kamipo/fix_calculate_with_string_in_from_and_eager_loading
Fix `calculate` with a string value in `from` and eager loading
2016-06-13 11:03:38 -04:00
Sean Griffin
2806203f10 Merge pull request #25372 from kamipo/remove_assert_date_from_db
Remove unnecessary `assert_date_from_db`
2016-06-13 10:53:15 -04:00
Sean Griffin
7d883b8293 Add codeclimate and rubocop config files
We're going to be experimenting with a new bot for them. This will not
cause anything to start affecting new PRs yet, but it will have data
sent to them so they can do "dry run" stuff on their end.

The rubocop file is based on our documented style guide. I've only
included rules which are either already consistently applied throughout
the entire codebase, or where added lines should be following the
guideline regardless of the surrounding code (such as hash syntax)
2016-06-13 10:29:50 -04:00
Ryuta Kamizono
681a0a0299 Fix calculate with a string value in from and eager loading
`construct_relation_for_association_calculations` pass a string value to
`construct_join_dependency` when setting a string value in `from`.
It should not pass a string value, but always `joins_values`.

Related #14834, #19452.

Fixes #24193.
2016-06-13 01:13:54 +09:00
Eileen M. Uchitelle
8a39123d5d Merge pull request #25362 from maclover7/jm-rm-ar-require
Remove unnecessary model requires
2016-06-12 09:22:17 -04:00
Ryuta Kamizono
4e545d0e43 Remove unnecessary assert_date_from_db
`assert_date_from_db` was added at 6a2104d for SQL Server.
But latest sqlserver adapter work to pass expected behavior since
8e4624b.
2016-06-12 20:54:03 +09:00
Ryuta Kamizono
5deb44d6ea Remove outdated comments [ci skip]
These comments were added at dd257a3ccb30ab181cd48d3d81bc7f23bb45f36f
but outdated since #2086.
2016-06-12 20:30:10 +09:00
Francesco Rodriguez
65f96f3805 Fix typo
[ci skip]
2016-06-12 00:22:36 +02:00
Ryuta Kamizono
97c01bc776 Fix or result SQL [ci skip] 2016-06-11 20:28:50 +09:00
Jon Moss
b1a00fbc75
Remove unnecessary model requires 2016-06-10 22:20:19 -04:00
Prathamesh Sonpatki
8f7ab13643
Reuse existing validate_index_length! method
- Followup of 1ea6cc1121.
2016-06-09 15:50:57 -07:00
Sean Griffin
d65320714e Remove dead code from tests
This code was added in 81286f858770e0b95e15af37f19156b044ec6a95, but was
not used by that commit and does not appear to have ever been used.
2016-06-09 11:19:41 -04:00
Sean Griffin
6990fd3e2a Merge pull request #25329 from yahonda/allow_oracle_bind_value_syntax_in_loj_test
Allow Oracle bind parameter syntax `:a1` in test_join_conditions_added_to_join_clause
2016-06-09 09:30:53 -04:00
Abhishek Jain
a3ac43f4d2 Fix typo 2016-06-09 10:45:38 +05:30
Yasuo Honda
d207023f83 Allow Oracle bind parameter syntax :a1 2016-06-08 17:17:22 +00:00
Wojciech Wnętrzak
b991017bf1
Generate application_record.rb file before model file
Previously model file was generated first, which resulted in
inheriting from `ActiveRecord::Base`, but since application_record.rb
is generated as well, it should already be used.
2016-06-08 08:52:12 +02:00
Ryuta Kamizono
7b7b7c5ce6 Extract foreign key action from information_schema
Fixes #25300.
2016-06-07 06:26:49 +09:00
Ryuta Kamizono
16bb3d6f12 Make foreign_keys queries to SCHEMA 2016-06-07 06:16:56 +09:00
Ryuta Kamizono
aa062318c4 Avoid type casting in uniqueness validator
Type casting in uniqueness validator is for a string value truncation.
It was removed at #23523.
2016-06-04 23:15:46 +09:00
Ryuta Kamizono
faed011acc Fix sqlite3 test failure
Sqlite3 test failure is due to 66ebbc4952f6cfb37d719f63036441ef98149418.
2016-06-04 16:03:44 +09:00
Arthur Neves
66ebbc4952
Dont re-define class SQLite3Adapter on test
We were declaring  in a few tests, which depending of
the order load will cause an error, as the super class could change.

see ac1c4e141b (commitcomment-17731383)
2016-06-03 17:17:53 -04:00
Yves Senn
082a515825 Merge pull request #25243 from sukesan1984/add_i18n_validation_test
Add i18n_validation_test
2016-06-03 11:30:19 +02:00
Sean Griffin
c587b63664 Ensure that records with unselected fields can be updated
As part of refactoring mutation detection to be more performant, we
introduced the concept of `original_value` to `Attribute`. This was not
overridden in `Attribute::Uninitialized` however, so assigning ot an
uninitialized value and calling `.changed?` would raise
`NotImplementedError`.

We are using a sentinel value rather than checking the result of
`original_attribute.initialized?` in `changed?` because `original_value`
might go through more than one node in the tree.

Fixes #25228
2016-06-02 11:34:48 -04:00
Sean Griffin
1b8a7b8293 Fix failing tests
Currently CI is broken due to 56a61e0 and c4cb686. This occurred because
the failures are not present on SQLite which is what I normally run
locally before pushing.

The optimizations to our YAML size were dropping mutations, as
`with_type` didn't set the previous value if it'd already been read
(that method was never really designed to be used with values on
individual objects, it was previously only used for defaults). I'm
questioning whether there's a better place to be handling the exclusion
of the type, but this will fix the failing build.

Additionally, there was a bug in `remove_foreign_key` if you passed it
an options hash containing `to_table`. This now occurs whenever removing
a reference, as we always normalize to a hash.

[Sean Griffin & Ryuta Kamizono]
2016-06-02 11:06:01 -04:00
sukesan1984
3bd30d9824 Add i18n_validation_test
add active record uniqueness validation test for { on: [:create, :update] } condition.
2016-06-02 04:17:15 +00:00
Sean Griffin
c4cb6862ba Make Active Record emit significantly smaller YAML
This reduces the size of a YAML encoded Active Record object by ~80%
depending on the number of columns. There were a number of wasteful
things that occurred when we encoded the objects before that have
resulted in numerous wins

- We were emitting the result of `attributes_before_type_cast` as a hack
  to work around some laziness issues
- The name of an attribute was emitted multiple times, since the
  attribute objects were in a hash keyed by the name. We now store them
  in an array instead, and reconstruct the hash using the name
- The types were included for every attribute. This would use backrefs
  if multiple objects were encoded, but really we don't need to include
  it at all unless it differs from the type at the class level. (The
  only time that will occur is if the field is the result of a custom
  select clause)
- `original_attribute:` was included over and over and over again since
  the ivar is almost always `nil`. We've added a custom implementation
  of `encode_with` on the attribute objects to ensure we don't write the
  key when the field is `nil`.

This isn't without a cost though. Since we're no longer including the
types, an object can find itself in an invalid state if the type changes
on the class after serialization. This is the same as 4.1 and earlier,
but I think it's worth noting.

I was worried that I'd introduce some new state bugs as a result of
doing this, so I've added an additional test that asserts mutation not
being lost as the result of YAML round tripping.

Fixes #25145
2016-05-31 14:58:43 -04:00
Sean Griffin
56a61e0c43 Respect options passed to foreign_key when reverting add_reference
The code incorrectly assumes that the option was written as
`foreign_key: true`, but that is not always the case. This now mirrors
the behavior of reverting `add_foreign_key`. The code was changed to use
kwargs while I was touching it, as well.

This could really use a refactoring to go through the same code paths as
`add_refernce` in the future, so we don't duplicate default values.

Fixes #25169
2016-05-31 12:55:02 -04:00
Sean Griffin
fc3bfdbdf5 Merge pull request #25213 from kamipo/do_not_include_default_column_limit
Do not include default column limit in schema.rb
2016-05-31 11:51:13 -04:00
Sean Griffin
c8be4574a2 ActiveRecord::Base#hash should differ between classes
Prior to this change, we would get collisions if Active Record objects
of different classes with the same ID were used as keys of the same
hash. It bothers me slightly that we have to allocate inside of this
method, but Ruby doesn't provide any way to hash multiple values without
allocation
2016-05-31 11:38:10 -04:00
Ryuta Kamizono
706f7e9c3e Do not include default column limit in schema.rb
Follow up of #20815.

```ruby
class CreatePeople < ActiveRecord::Migration[5.0]
  def change
    create_table :people do |t|
      t.integer :int
      t.bigint :bint
      t.text :txt
      t.binary :bin
    end
  end
end
```

Result.

In postgresql and sqlite3 adapters:

```ruby
ActiveRecord::Schema.define(version: 20160531141018) do

  create_table "people", force: :cascade do |t|
    t.integer "int"
    t.bigint  "bint"
    t.text    "txt"
    t.binary  "bin"
  end

end
```

In mysql2 adapter:

```ruby
ActiveRecord::Schema.define(version: 20160531141018) do

  create_table "people", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4" do |t|
    t.integer "int"
    t.bigint  "bint"
    t.text    "txt",  limit: 65535
    t.binary  "bin",  limit: 65535
  end

end
```

After this patch:

```ruby
ActiveRecord::Schema.define(version: 20160531141018) do

  create_table "people", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4" do |t|
    t.integer "int"
    t.bigint  "bint"
    t.text    "txt"
    t.binary  "bin"
  end

end
```
2016-05-31 23:22:07 +09:00
Sean Griffin
ff4986b917 Ensure hashes can be passed to attributes using composed_of
This behavior was broken by 36e9be85. When the value is assigned
directly, either through mass assignment or directly assigning a hash,
the hash gets passed through to this writer method directly. While this
is intended to handle certain cases, when an explicit converter has been
provided, we should continue to use that instead. The positioning of the
added guard caused the new behavior to override that case.

Fixes #25210
2016-05-31 10:03:26 -04:00
Sean Griffin
d92a0d040d Merge pull request #25179 from kamipo/reuse_result_of_associated_table
Reuse a result of `table.associated_table(column)` in `AssociationQueryHandler.value_for`
2016-05-30 16:22:43 -04:00
Sean Griffin
02da8aea83 Exists shouldn't error when used with includes
Currently `exists?` does some hackery where it assumes that we can join
onto anything that we passed to `eager_load` or `includes`, which
doesn't work if we are joining onto a polymorphic association.

Actually figuring out if we want to include something would require
knowledge deep within the join dependency module, which is hard to pull
up. The simplest solution is just to pass a flag down that says we're
not actually going to try to eager load any of the data. It's not the
solution I'd like, but that code really needs to be untangled before we
can do much with it.

This is another attempt at 6d5b1fd which should address the concerns
that led to reverting it in 4ecabed.
2016-05-30 15:58:03 -04:00
Kasper Timm Hansen
88f763b047 Merge pull request #25175 from kamipo/fix_migration_class_names_in_tests
Fix migration class names in tests
2016-05-30 19:58:43 +02:00
Robin Dupret
1afdbbeb27 Tiny document fixes [ci skip]
Add a missing capital letter and avoid using absolute links to the
API because they may refer to out-dated documentation on the Edge
site.
2016-05-30 15:58:53 +02:00
Genadi Samokovarov
a11a3861b4 Merge branch 'master' into always-inherit-from-application-record 2016-05-30 14:53:03 +03:00
Arthur Nogueira Neves
3f2e83d964 Merge pull request #22240 from resource11/resource11-patch-1
Requesting documentation update
2016-05-29 19:50:22 -04:00
Arthur Nogueira Neves
ff63bb8231 Merge pull request #24965 from arthurnn/arthurnn/conn_api
Change some establish_connection logic
2016-05-29 12:48:36 -04:00
Ryuta Kamizono
09976b458b Reuse a result of table.associated_table(column) in AssociationQueryHandler.value_for 2016-05-28 17:19:09 +09:00
Ryuta Kamizono
6cbd96aa14 Fix migration class names in tests 2016-05-28 14:16:43 +09:00
Ryuta Kamizono
e53b025d28 Remove unused association_for_table private method
`association_for_table` is unused since 50a8cdf.
2016-05-27 15:07:03 +09:00
Jon Moss
8e2e5f9e3d Fix has_one enum where queries
Fixes #25128
2016-05-26 18:00:51 -04:00
Arthur Neves
028748945b
Add to_hash to specification 2016-05-25 00:14:39 -04:00
Arthur Neves
779ccf8a0e
Remove name from establish_connection
Instead of passing a separete name variable, we can make the resolver
merge a name on the config, and use that before creating the Specification.
2016-05-24 23:57:43 -04:00
Arthur Neves
5167b8f7ff
Move establish_connection to handler 2016-05-24 22:03:00 -04:00
Javan Makhmali
d12209cad2 Remove package:clean task
Introduced in d6f2000a67cc63aa67414c75ce77de671824ec52 and was only used by Action Cable. Now handled by Action Cable’s assets:compile task.
2016-05-24 13:11:28 -04:00
Benjamin Quorning
e4701e613c [] and read_attribute are not aliases [ci skip]
The `#[]` method *used to be* an alias of `#read_attribute`, but since Rails 4
(10f6f90d9d1bbc9598bffea90752fc6bd76904cd), it will raise an exception for
missing attributes. Saying that it is an alias is confusing.
2016-05-24 13:20:28 +02:00
Rafael França
cf403266e5 Merge pull request #24862 from maclover7/jm-ar-fixes
Add missing `the`
2016-05-21 12:47:39 -03:00
Rafael França
c0d4aa2293 Merge pull request #25093 from Erol/activerecord-transaction-serialization-error
Introduce AR::TransactionSerializationError for transaction serialization failures or deadlocks
2016-05-21 12:36:20 -03:00
Jon Moss
355f68bcbf
Add missing the
[ci skip]
2016-05-21 10:43:18 -04:00
Erol Fornoles
4d525a6f75 Add AR::TransactionSerializationError for transaction serialization failures or deadlocks 2016-05-21 21:51:52 +08:00
Rafael Mendonça França
85ee483fe1
Whitespaces [ci skip] 2016-05-21 09:55:06 -03:00
Jon Moss
d95947a87e Add CHANGELOG.md reference for #24958 (#25094)
Sorry for forgetting to include it in my original PR 😬

r? @rafaelfranca

[ci skip]
2016-05-21 09:51:36 -03:00
Rafael França
91421984b7 Merge pull request #24732 from y-yagi/update_record_specified_in_the_key
update record specified in key
2016-05-21 09:01:36 -03:00
Rafael França
3e54c1c40e Merge pull request #24958 from maclover7/fix-24955
Fix ActiveRecord::LogSubscriber edge case
2016-05-20 23:34:48 -03:00
Rafael França
d0c257f5da Merge pull request #24984 from kamipo/remove_magic_comment_in_schema.rb
Remove magic comment in generated `schema.rb`
2016-05-20 23:26:04 -03:00
Benjamin Quorning
70d504f626 [ci skip] Update retrieve_connection_pool comment
After PR https://github.com/rails/rails/pull/24844 the documentation for
`#retrieve_connection_pool` was out of date. This commit changes:

- the reference from `@class_to_pool` to `@owner_to_pool`.
- with newer Rubies, `#fetch` isn't significantly slower than `#[]`. Since Rails 5
requires Ruby >= 2.2.2, we can just use `#fetch` here.
2016-05-20 14:30:08 +02:00
Jeremy Daer
89e2f7e722
Support for unified Integer class in Ruby 2.4+
Ruby 2.4 unifies Fixnum and Bignum into Integer: https://bugs.ruby-lang.org/issues/12005

* Forward compat with new unified Integer class in Ruby 2.4+.
* Backward compat with separate Fixnum/Bignum in Ruby 2.2 & 2.3.
* Drops needless Fixnum distinction in docs, preferring Integer.
2016-05-18 21:58:51 -07:00
Kasper Timm Hansen
8fffee4b1c Merge pull request #24203 from sferik/count_with_block
Forward ActiveRecord::Relation#count to Enumerable#count if block given
2016-05-16 20:39:28 +02:00
Sean Griffin
a7ecc63679 Merge pull request #25009 from jahfer/suppressor-keep-state
Keep previous state around for nested calls to #suppress
2016-05-16 14:11:32 -04:00
Jahfer Husain
25801cfe78 Keep state around for nested calls to #suppress
If a call to #suppress from the same class occurred inside another #suppress
block, the suppression state would be set to false before the outer block
completes.

This change keeps the previous state around in memory and unwinds it
as the blocks exit.
2016-05-16 14:07:32 -04:00
Sean Griffin
aa7ded6a36 Merge pull request #23810 from xijo/fix_json_coder_when_mysql_strict_is_disabled
Fix bug in JSON deserialization when column default is an empty string
2016-05-16 10:44:58 -04:00
bUg
e3cd321d4b Rails 5.1 point type should not raise exception if empty string is provided as value 2016-05-15 16:14:57 +03:00
Vijay Dev
83ecf3fe56 Merge branch 'master' of github.com:rails/docrails
Conflicts:
	guides/source/configuring.md
2016-05-14 09:54:23 +00:00
Kang-Kyu Lee
238c77dedf Add missing space and newline for clarity 2016-05-12 20:59:38 -07:00
Sean Griffin
0991c4c6fc Give more context from AssociationMismatchError
The error message that we give today makes this error difficult to debug
if you receive it. I have no clue why we're printing the object ID of
the class (the commit doesn't give context), but I've left it as it was
deliberate.
2016-05-12 22:20:45 -04:00
Molchanov Andrey
37f2674d64 Rename test method 2016-05-12 22:45:18 +03:00
Sean Griffin
6007e584d8 Fix false positive mutation detection when JSON is used with serialize
When looking for mutation, we compare the serialized version of the
value to the before_type_cast form. `Type::Serialized` was breaking this
contract by passing the already serialized attribute to the subtype's
mutation detection. This never manifested previously, as all mutable
subtypes either didn't do anything in their `serialize` method, or had a
way to detect double serialization (e.g. `is_a?(String)`). However, now
that JSON types can handle string primitives, we need to avoid double
serialization.

Fixes #24993.
2016-05-12 09:09:47 -04:00
Sean Griffin
d1794cd88c Merge pull request #24980 from merhard/virtual-attribute-default
Define ActiveRecord::Attribute::Null#type_cast
2016-05-11 22:00:37 -04:00
Ryuta Kamizono
2a71885a3f Remove magic comment in generated schema.rb
Rails 5.0 has been dropped Ruby 1.9 support.
I think no need magic comment anymore.
2016-05-12 05:43:08 +09:00
Arthur Neves
537a342a83
remove_connection should not remove parent connection
When calling remove_connection in a subclass, that should not fallback
to the parent, otherwise it will remove the parent connection from the
handler.
2016-05-11 13:39:26 -04:00
Matthew Erhard
556e530da4 Define ActiveRecord::Attribute::Null#type_cast
Using ActiveRecord::Base.attribute to declare an attribute with a default value on a model where the attribute is not backed by the database would raise a NotImplementedError when model.save is called.

The error originates from 59d252196b/activerecord/lib/active_record/attribute.rb (L84).
This is called from 59d252196b/activerecord/lib/active_record/attribute.rb (L46) on an ActiveRecord::Attribute::Null object.

This commit corrects the behavior by implementing ActiveRecord::Attribute::Null#type_cast.

With ActiveRecord::Attribute::Null#type_cast defined, ActiveRecord::Attribute::Null#value (59d252196b/activerecord/lib/active_record/attribute.rb (L173..L175)) can be replaced with its super method (59d252196b/activerecord/lib/active_record/attribute.rb (L36..L40)).

fixes #24979
2016-05-11 13:21:01 -04:00
Arthur Nogueira Neves
733161d48b Merge pull request #24971 from arthurnn/arthurnn/dont_cache_specification_name
Dont cache the conn_spec_name when empty
2016-05-11 09:02:10 -04:00
Arthur Neves
897decaceb
Set conn_spec_name after remove
`remove_connection` can reset the `connection_specification_name`, so we
need to to set it after the remove_connection call on
`establish_connection` method.
2016-05-11 08:37:56 -04:00
Arthur Neves
f1030fd897
Dont cache the conn_spec_name when empty
We cannot cache the connection_specification_name when it doesnt
exist. Thats because the parent value could change, and we should keep
failling back to the parent. If we cache that in a children as an ivar,
we would not fallback anymore in the next call, so the children would
not get the new parent spec_name.
2016-05-11 08:04:26 -04:00
yui-knk
64634ce61a [ci skip] Update documents of ConnectionHandler
Follow up of #24844.
The key of `@owner_to_pool` was changed from `klass.name` to
`spec.name`. By this change "memory leaks in development mode"
will not happen, bacause the equality of string is not changed
by reloading of model files.
2016-05-11 13:40:57 +09:00
Arthur Neves
d6f3ad7ce7
Make sure we reset the connection_specification_name on
remove_connection

When calling `remove_connection` on a model, we delete the pool so we also
need to reset the `connection_specification_name` so it will fallback to
the parent.
This was the current behavior before rails 5, which will fallback to the
parent connection pool.

[fixes #24959]

Special thanks to @jrafanie for working with me on this fix.
2016-05-10 23:42:26 -04:00
Jon Moss
c650341573 Fix ActiveRecord::LogSubscriber edge case
If an attribute was of the binary type, and also was a Hash, it would
previously not be logged, and instead raise an error saying that
`bytesize` was not defined for the `attribute.value` (a `Hash`).

Now, as is done on 4-2-stable, the attribute's database value is
`bytesize`d, and then logged out to the terminal.

Reproduction script:

```ruby
require 'active_record'
require 'minitest/autorun'
require 'logger'

ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
ActiveRecord::Base.logger = Logger.new(STDOUT)

ActiveRecord::Schema.define do
  create_table :posts, force: true do |t|
    t.binary :preferences
  end
end

class Post < ActiveRecord::Base
  serialize :preferences
end

class BugTest < Minitest::Test
  def test_24955
    Post.create!(preferences: {a: 1})

    assert_equal 1, Post.count
  end
end
```
2016-05-10 15:42:07 -04:00
Ralin Chimev
09a90bb6a0 PostgreSQL: Fix db:structure:load silent failure on SQL error
The command line flag "-v ON_ERROR_STOP=1" should be used when invoking psql to make sure errors are not suppressed.

Example: psql -v ON_ERROR_STOP=1 -q -f awesome-file.sql my-app-db

Fixes #23818.
2016-05-10 22:23:44 +03:00
Rafael França
6dec764519 Merge pull request #24950 from kamipo/should_quote_lock_name
Should quote `lock_name` to pass to `get_advisory_lock`
2016-05-10 05:10:23 -03:00
Xavier Noria
6c471becf0 Merge pull request #24939 from Neodelf/again_with_loop
Replacement cycle for readability
2016-05-10 09:15:22 +02:00
Ryuta Kamizono
54772667ee Should quote lock_name to pass to get_advisory_lock 2016-05-10 16:14:45 +09:00
Molchanov Andrey
88f804d3a9 Replacement cycle for readability 2016-05-10 09:55:58 +03:00
Rafael Mendonça França
697ab08af9 Add migration compatibility class for Rails 5.1 2016-05-10 03:46:56 -03:00
Rafael Mendonça França
8ecc5ab1d8 Start Rails 5.1 development 🎉 2016-05-10 03:46:56 -03:00
Molchanov Andrey
ce8b0cbf34 Replacement cycle for readability 2016-05-09 00:45:22 +03:00
Jon Moss
a8258e2bed Followup to #24844
Some slight documentation edits and fixes. Also, run remove unnecessary
`RuntimeError`.

r? @arthurnn
2016-05-07 17:41:11 -04:00
Rafael Mendonça França
fbdcf5221a Preparing for 5.0.0.rc1 release 2016-05-06 16:54:40 -05:00
Arthur Nogueira Neves
fcb223dd53 Merge pull request #24844 from arthurnn/arthurnn/conn
Refactor connection handler
2016-05-06 15:50:50 -05:00
Arthur Neves
36ce6aba98
Update docs for connection handler
[skip ci]
2016-05-06 15:11:48 -05:00
Arthur Nogueira Neves
40d5c3370f Merge pull request #24871 from vipulnsward/disable-transaction-failure
Fix failures due to transactions
2016-05-06 14:00:49 -05:00
Vipul A M
8a42229fcf We are erroring due to nested transaction failures from mysql on test_migrate_clears_schema_cache_afterward test.
Disable transactions for this test.

Fixes #24391
2016-05-06 14:00:21 -05:00
Arthur Neves
22a127c57b
s/specification_name/connection_specification_name 2016-05-06 13:22:49 -05:00
Sean Griffin
96f3f3d826 Allow the connection adapters to determine the order of bind params
In 5.0 we use bind parameters for limit and offset, while in 4.2 we used
the values directly. The code as it was written assumed that limit and
offset worked as `LIMIT ? OFFSET ?`. Both Oracle and SQL Server have a
different syntax, where the offset is stated before the limit. We
delegate this behavior to the connection adapter so that these adapters
are able to determine how the bind parameters are flattened based on
what order their specification has the various clauses appear.

Fixes #24775
2016-05-06 11:58:01 -05:00
Arthur Neves
598e7c9e20
s/specification_id/specification_name 2016-05-05 15:39:27 -05:00
Rafael França
ed94ed3e1f Merge pull request #24869 from vipulnsward/change-example
Change to use a more realistic example [ci skip]
2016-05-05 15:32:52 -05:00
Rafael França
dd7bdd0e90 Merge pull request #24868 from vipulnsward/delegate_encode_with
delegate encode_with instead of to_yaml, which is deprecated
2016-05-05 15:32:07 -05:00
Vipul A M
c91f4cc0f6 Change to use a more realistic example and not giving the impression that destroy_all is preferred way to destroy related records.
This example just wants to demonstrate callback behaviour.

[ci skip]
2016-05-05 15:30:21 -05:00
Arthur Neves
34856ba9fa
Retrive the right pool for db tasks 2016-05-05 15:29:11 -05:00
Arthur Neves
7d9d076e73
inline retrive_conn_pool method 2016-05-05 15:29:11 -05:00
Arthur Neves
40a8d2f3b5
Better code readability 2016-05-05 15:29:11 -05:00
Arthur Neves
c1ae7ec15b
Test to swap connection at runtime 2016-05-05 15:29:11 -05:00
Arthur Neves
9872905336
fix test 2016-05-05 15:29:11 -05:00
Arthur Neves
ac1c4e141b
Add spec_id tests 2016-05-05 15:29:11 -05:00
Arthur Neves
79154a3281
Use spec key, when given as spec_id 2016-05-05 15:29:11 -05:00
Arthur Neves
c1bc0d83de
Better specification_id method 2016-05-05 15:29:11 -05:00
Arthur Neves
314cf0398c
Rename method 2016-05-05 15:29:11 -05:00
Arthur Neves
b83fb84733
Refactor connection handler
ConnectionHandler will not have any knowlodge of AR models now, it will
only know about the specs.
Like that we can decouple the two, and allow the same model to use more
than one connection.

Historically, folks used to create abstract AR classes on the fly in
order to have multiple connections for the same model, and override the
connection methods.

With this, now we can override the `specificiation_id` method in the
model, to return a key, that will be used to find the connection_pool
from the handler.
2016-05-05 15:29:11 -05:00
Vipul A M
8afea8ebe7 delegate encode_with instead of to_yaml, which is deprecated 2016-05-05 15:08:18 -05:00
Kasper Timm Hansen
19ba522b90 [ci skip] Don't promote SQL interpolation.
After fb898e9, the `before_destroy` had some code that used
SQL interpolation left over. Don't think we should promote
that even if the values aren't directly from user input.
2016-05-05 17:04:21 +02:00
Vipul A M
fb898e986f Merge pull request #24859 from y-yagi/do_not_pass_conditon_to_destroy_all
do not pass conditions to `#destroy_all` [ci skip]
2016-05-05 07:37:20 -05:00
yuuji.yaginuma
c16a4ca397 do not pass conditions to #destroy_all [ci skip]
Passing conditions to `#destroy_all` was deprecated in c82c5f8.
2016-05-05 21:21:26 +09:00
Joe Rafaniello
d2660c8cad Fix some typos in comments.
[ci skip]
2016-05-04 12:22:23 -04:00
Vipul A M
a51bdd3ddc Followup of #24835
Fix failing tests
2016-05-03 17:18:21 -05:00
प्रथमेश Sonpatki
5fd17b9257 Merge pull request #24833 from Erol/fix-typo
Fix small typo in Active Record Migrations documentation
2016-05-03 06:59:19 -05:00
Erol Fornoles
2687a5e0ab Fix small typo in Active Record Migrations documentation [ci skip] 2016-05-03 19:55:45 +08:00
yuuji.yaginuma
e86a1bd1d7 remove empty? from CHANGELOG [ci skip]
Follow up to 98264a1343fad6bb6637893a37fd571916b4158c
2016-05-03 20:49:07 +09:00