Commit Graph

15427 Commits

Author SHA1 Message Date
Xavier Noria
d22e522179 modernizes hash syntax in activerecord 2016-08-06 19:37:57 +02:00
Xavier Noria
e6ab70c439 applies new string literal convention to the rest of the project
The current code base is not uniform. After some discussion,
we have chosen to go with double quotes by default.
2016-08-06 19:28:46 +02:00
Xavier Noria
adca8154c6 applies new string literal convention in the gemspecs
The current code base is not uniform. After some discussion,
we have chosen to go with double quotes by default.
2016-08-06 19:27:12 +02:00
Xavier Noria
9617db2078 applies new string literal convention in activerecord/test
The current code base is not uniform. After some discussion,
we have chosen to go with double quotes by default.
2016-08-06 18:26:53 +02:00
Xavier Noria
4df2b779dd applies new string literal convention in activerecord/lib
The current code base is not uniform. After some discussion,
we have chosen to go with double quotes by default.
2016-08-06 18:26:45 +02:00
Eileen M. Uchitelle
6510f9980d Merge pull request #25998 from kamipo/enum_with_alias_attribute
Fix `enum` with `alias_attribute`
2016-08-06 10:30:15 -04:00
Eileen M. Uchitelle
53607c8e9f Merge pull request #25665 from kamipo/remove_unused_table_arg
Remove unused `table` arg for `UniquenessValidator#scope_relation`
2016-08-05 16:41:45 -04:00
Eileen M. Uchitelle
2bd9ec6b3d Merge pull request #26051 from kamipo/make_name_and_binds_to_optional_args
Make `name` and `binds` to optional args for `exec_{insert,update,delete}`
2016-08-05 16:32:14 -04:00
Sean Griffin
b63d532f1e Don't assume all hashes are from multiparameter assignment in composed_of
So this bug is kinda funky. The code path is basically "if we weren't passed an
instance of the class we compose to, and we have a converter, call that".
Ignoring the hash case for a moment, everything after that was roughly intended
to be the "else" clause, meaning that we are expected to have an instance of
the class we compose to. Really, we should be blowing up in that case, as we
can give a much better error message than what they user will likely get (e.g.
`NameError: No method first for String` or something). Still, Ruby is duck
typed, so if the object you're assigning responds to the same methods as the
type you compose to, knock yourself out.

The hash case was added in 36e9be8 to remove a bunch of special cased code from
multiparameter assignment. I wrongly assumed that the only time we'd get a hash
there is in that case. Multiparameter assignment will construct a very specific
hash though, where the keys are integers, and we will have a set of keys
covering `1..part.size` exactly. I'm pretty sure this could actually be passed
around as an array, but that's a different story. Really I should convert this
to something like `class MultiParameterAssignment < Hash; end`, which I might
do soon. However for a change that I'm willing to backport to 4-2-stable, this
is what I want to go with for the time being.

Fixes #25978
2016-08-05 09:52:09 -04:00
David Heinemeier Hansson
7443a332a7 Leave internal pgsql name intact as const reference 2016-08-04 14:43:40 -07:00
David Heinemeier Hansson
ac76d551ce The problem isn't the detection but the deadlock itself 2016-08-04 14:39:09 -07:00
Ryuta Kamizono
cdc466692c Make name and binds to optional args for exec_{insert,update,delete}
`insert`, `update`, `delete`, and `exec_query` have a default value
against `name` and `binds`. But `exec_insert`, `exec_update`, and
`exec_delete` not have. It is an inconvenience and inconsistent.
2016-08-04 09:29:38 +09:00
Rafael Mendonça França
fac9938b91
Merge pull request #25107 from Erol/introduce-new-ar-transaction-error-classes
Introduce new ActiveRecord transaction error classes

Closes #26018
2016-08-03 07:05:22 -03:00
Rafael França
8ada07b2b8 Merge pull request #26026 from kamipo/tx_serialization_error_should_inherit_statement_invalid
`TransactionSerializationError` should inherit `StatementInvalid` for backward compatibility
2016-08-03 07:01:01 -03:00
Ryuta Kamizono
954b197056 Avoid duplicated set_inverse_instance for target scope
Because `scope` (`target_scope`) is a `AssociationRelation`.
`AssociationRelation` handles `set_inverse_instance`.

https://github.com/rails/rails/blob/v5.0.0/activerecord/lib/active_record/association_relation.rb#L31-L33

See also #26022.
2016-08-03 15:20:04 +09:00
Kasper Timm Hansen
7f00b8fa97 Merge pull request #26022 from kamipo/remove_unnecessary_set_inverse_instance
Remove unnecessary `set_inverse_instance` in finder methods
2016-08-02 22:09:33 +02:00
Arthur Neves
88cdecc050
Remove extra connection pool creation 2016-08-02 13:46:07 -04:00
Vijay Dev
4d288f0b43 Merge branch 'master' of github.com:rails/docrails 2016-08-02 17:38:56 +00:00
Ryuta Kamizono
f78eda63ed TransactionSerializationError should inherit StatementInvalid for backward compatibility
Originally `TransactionSerializationError` was `StatementInvalid` in
Rails 5.0. It should keep backward compatibility.
2016-08-02 23:52:02 +09:00
Ryuta Kamizono
a76ebe5019 Remove unnecessary set_inverse_instance in finder methods
Because `scope` (`target_scope`) is a `AssociationRelation`.
`AssociationRelation` handles `set_inverse_instance`.

https://github.com/rails/rails/blob/v5.0.0/activerecord/lib/active_record/association_relation.rb#L31-L33
2016-08-02 16:53:06 +09:00
Ryuta Kamizono
83f08647d6 Fix enum with alias_attribute
Fixes #25892.
2016-07-31 05:16:20 +09:00
Ryuta Kamizono
fa84a4d7c1 Remove unnecessary methods for NullRelation 2016-07-29 22:49:47 +09:00
Rafael França
b37bd3d52f Merge pull request #25941 from kamipo/finder_methods_uses_load_target
`FinderMethods` uses `records` (`load_target`) when `loaded?` is true
2016-07-28 10:39:04 -03:00
Rafael França
519801db08 Merge pull request #25940 from kamipo/fix_collection_proxy_load
Fix to `CollectionProxy#load` does `load_target`
2016-07-28 10:36:50 -03:00
Rafael França
fb30df9c10 Merge pull request #25937 from kamipo/remove_prepare_binds_for_database
Remove `prepare_binds_for_database` internal method
2016-07-28 10:36:10 -03:00
Rafael França
be85efe8db Merge pull request #25340 from kamipo/prevent_table_comment_query
Prevent `table_comment` query if a table doesn't have a comment
2016-07-28 10:33:41 -03:00
Rafael França
b3348819c5 Merge pull request #25974 from kamipo/avoid_calling_current_database_in_table_comment
Avoid calling `current_database` in `table_comment`
2016-07-28 10:31:38 -03:00
Ryuta Kamizono
5546f2d712 Avoid calling current_database in table_comment
`current_database` executes a query and `table_comment` is called to all
tables even if a table does not have a comment. Using `current_database`
increases extra queries.
2016-07-28 16:29:26 +09:00
Ryuta Kamizono
8a3560ed1e @quoted_{column,table}_names should cache a frozen string
Caching a mutable string causes the following issue.

```
Loading development environment (Rails 5.1.0.alpha)
irb(main):001:0> ActiveRecord::Base.connection.quote_table_name('foo') << '!!'
=> "`foo`!!"
irb(main):002:0> ActiveRecord::Base.connection.quote_table_name('foo') << '!!'
=> "`foo`!!!!"
irb(main):003:0> ActiveRecord::Base.connection.quote_table_name('foo') << '!!'
=> "`foo`!!!!!!"
```
2016-07-28 16:01:30 +09:00
Ryuta Kamizono
5465508abe Remove prepare_binds_for_database internal method
To avoid relying on the connection adapter for type casting binds.
2016-07-28 14:28:44 +09:00
Ryuta Kamizono
fe48c97e26 FinderMethods uses records (load_target) when loaded? is true 2016-07-28 13:54:46 +09:00
Rafael França
70ec7feaec Merge pull request #25767 from kamipo/association_name_is_the_same_as_join_table_name
Correctly return `associated_table` when `associated_with?` is true
2016-07-27 23:23:05 -03:00
Takeshi AKIMA
ea1dcbbc99 Add the TABLE_SCHEMA condition to the SELECT statement in table_comment (#25945)
[Rafael Mendonça França + Takeshi AKIMA]
2016-07-27 23:19:08 -03:00
Sean Griffin
a64d9835f1 Merge pull request #25702 from k0kubun/joins-circular-reference
Remove circular join references in join_dependency
2016-07-27 20:31:38 -04:00
Rafael França
c191778308 Merge pull request #25938 from kamipo/decouple_statement_cache_from_connection_adapter
Decouple statement cache from connection adapter
2016-07-27 20:10:31 -03:00
Takashi Kokubun
28c29973aa Remove circular join references in join_dependency
Fixes #25653.
2016-07-28 03:25:20 +09:00
Yves Senn
7e6996a1b3 Merge pull request #25958 from kamipo/should_be_target_loaded
Add an assertion to the tests that should be loaded the target.
2016-07-27 09:55:43 +02:00
Yves Senn
d0f8061cae Merge pull request #25408 from kamipo/should_not_reuse_quoted_true
Quoting booleans should return a frozen string
2016-07-27 08:20:22 +02:00
Sean Griffin
d980abdb23 Merge pull request #25523 from kamipo/extract_quoted_binds_type_casted_binds
Extract `type_casted_binds` method
2016-07-26 17:38:17 -04:00
Ryuta Kamizono
a3a6d74c77 Quoting booleans should return a frozen string
If reuse `QUOTED_TRUE` and `QUOTED_FALSE` without frozen, causing the
following issue.

```
Loading development environment (Rails 5.1.0.alpha)
irb(main):001:0> ActiveRecord::Base.connection.quote(true) << ' foo'
=> "1 foo"
irb(main):002:0> ActiveRecord::Base.connection.quote(true) << ' foo'
=> "1 foo foo"
irb(main):003:0> type = ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::MysqlString.new
=> #<ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::MysqlString:0x007fd40c15e018 @precision=nil, @scale=nil, @limit=nil>
irb(main):004:0> type.serialize(true) << ' bar'
=> "1 foo foo bar"
irb(main):005:0> type.cast(true) << ' bar'
=> "1 foo foo bar bar"
```
2016-07-27 00:44:16 +09:00
Ryuta Kamizono
92c8f01580 Add an assertion to the tests that should be loaded the target.
These test cases tests exactly mutating loaded target.
2016-07-27 00:32:50 +09:00
Santiago Pastorino
c4b33a7796 Merge pull request #25929 from kamipo/load_target_is_public_method
`load_target` is a public method
2016-07-26 11:43:47 -03:00
Ryuta Kamizono
944c7b9818 Make force_signal37_to_load_all_clients_of_firm to private
This is not a test case.
2016-07-26 13:14:59 +09:00
Ryuta Kamizono
d31c2e2cf8 Extract type_casted_binds method
Because `type_cast` against `binds` always requires
`attr.value_for_database` and this pattern appears frequently.
2016-07-26 09:49:53 +09:00
Sean Griffin
aa7a6047c2 Whoops, forgot the changelog entry for the previous commit 2016-07-25 11:13:01 -04:00
Sean Griffin
f0ddf87e4b Correct the behavior of virtual attributes on models loaded from the db
Previously we had primarily tested the behavior of these attributes by
calling `.new`, allowing this to slip through the cracks. There were a
few ways in which they were behaving incorrectly.

The biggest issue was that attempting to read the attribute would
through a `MissingAttribute` error. We've corrected this by returning
the default value when the attribute isn't backed by a database column.
This is super special cased, but I don't see a way to avoid this
conditional. I had considered handling this higher up in
`define_default_attribute`, but we don't have the relevant information
there as users can provide new defaults for database columns as well.

Once I corrected this, I had noticed that the attributes were always
being marked as changed. This is because the behavior of
`define_default_attribute` was treating them as assigned from
`Attribute::Null`.

Finally, with our new implementation, `LazyAttributeHash` could no
longer be marshalled, as it holds onto a proc. This has been corrected
as well. I've not handled YAML in that class, as we do additional work
higher up to avoid YAML dumping it at all.

Fixes #25787
Close #25841
2016-07-25 11:12:06 -04:00
Xavier Noria
95b2a6abc7 adds missing requires 2016-07-24 21:29:29 +02:00
Ryuta Kamizono
ceee776b5d Fix to CollectionProxy#load does load_target 2016-07-25 00:00:38 +09:00
Ryuta Kamizono
e703de17d8 Decouple statement cache from connection adapter
`StatementCache` is hard-coded in `cacheable_query` and be passed
`visitor` and `collector` from connection adapter. Simply it is
enough to pass a collected value.
2016-07-24 22:18:07 +09:00
Xavier Noria
7714e83da0 removes spurious line 2016-07-24 00:50:24 +02:00