aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/CHANGELOG.md
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | Apply record state based on parent transaction stateeileencodes2017-07-011-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Let's say you have a nested transaction and both records are saved. Before the outer transaction closes, a rollback is performed. Previously the record in the outer transaction would get marked as not persisted but the inner transaction would get persisted. ```ruby Post.transaction do post_one.save # will get rolled back Post.transaction(requires_new: true) do post_two.save # incorrectly remains marked as persisted end raise ActiveRecord::Rollback end ``` To fix this the PR changes transaction handling to have the child transaction ask the parent how the records should be marked. When there are child transactions, it will always be a SavpointTransaction because the stack isn't empty. From there we pass the parent_transaction to the child SavepointTransaction where we add the children to the parent so the parent can mark the inner transaction as rolledback and thus mark the record as not persisted. `update_attributes_from_transaction_state` uses the `completed?` check to correctly mark all the transactions as rolledback and the inner record as not persisted. ```ruby Post.transaction do post_one.save # will get rolled back Post.transaction(requires_new: true) do post_two.save # with new behavior, correctly marked as not persisted on rollback end raise ActiveRecord::Rollback end ``` Fixes #29320
* | | | Deprecate and replace `set_state` methodeileencodes2017-07-011-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `set_state` was directly setting the transaction state instance variable. It's better to set the state via specific methods (`rollback!` and `commit!` respectively. While undocumented and untested, it's possible someone is using `set_state` in their app or gem so I've added a deprecation notice to it. No where in the app do we use `nullify!` but I wanted to keep existing behavior while replacing the method with a better pattern.
* | | | Deprecate delegating to `arel` in `Relation`Ryuta Kamizono2017-06-291-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Active Record doesn't rely delegating to `arel` in the internal since 425f2ca. The delegation is a lower priority than delegating to `klass`, so it is pretty unclear which method is delegated to `arel`. For example, `bind_values` method was removed at b06f64c (a series of changes https://github.com/rails/rails/compare/79f71d3...b06f64c). But a relation still could respond to the method because `arel` also have the same named method (#28976). Removing the delegation will achieve predictable behavior.
* | | | Merge pull request #29601 from ↵Rafael Mendonça França2017-06-281-0/+4
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | kamipo/fix_eager_loading_to_respect_store_full_sti_class Fix eager loading to respect `store_full_sti_class` setting
| * | | | Fix eager loading to respect `store_full_sti_class` settingRyuta Kamizono2017-06-291-0/+4
| | | | |
* | | | | Enable query cache if set a configurationsTsukasa OISHI2017-06-291-0/+5
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ActiveRecord query cache is available when a connection is connected. Therefore, query cache is unavailable when entering the ActiveRecord::Base.cache block without being connected. ```ruby ActiveRecord::Base.cache do Task.find(1) # access to database. Task.find(1) # access to database. unavailable query cache end ``` If we use query cache with batch script etc, we need to connect before that. ```ruby Task.connection ActiveRecord::Base.cache do Task.find(1) # access to database. Task.find(1) # available query cache end ``` Before version 3.1, query cache had been enabled if a configuration was set up. In order to solve the `DATABASE_URL` issue(#8074), ActiveRecord has checked whether a connection is connected or not. Today, ActiveRecord.configurations respect `DATABASE_URL`. https://github.com/rails/rails/blob/master/activerecord/lib/active_record/core.rb#L46
* | | | ActiveRecord: do not create "has many through" records that have been removedTobias Kraze2017-06-281-0/+7
| | | | | | | | | | | | | | | | | | | | If a record was built on a HasManyThroughAssociation, then removed, and then the record was saved, the removed record would be created anyways.
* | | | Keep INNER JOIN when merging relationsMaxime Lapointe2017-06-201-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Doing `Author.joins(:posts).merge(Post.joins(:comments))` does this `SELECT ... INNER JOIN posts ON... LEFT OUTER JOIN comments ON...` instead of doing `SELECT ... INNER JOIN posts ON... INNER JOIN comments ON...`. This behavior is unexpected and makes little sense as, basically, doing `Post.joins(:comments)` means I want posts that have comments. Turning it to a LEFT JOIN means I want posts and join the comments data, if any. We can see this problem directly in the existing tests. The test_relation_merging_with_merged_joins_as_symbols only does joins from posts to comments to ratings while the ratings fixture isn't loaded, but the count is non-zero.
* | | | Fix ActiveRecord::Persistence#touch with lockingbogdanvlviv2017-06-211-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | `ActiveRecord::Persistence#touch` does not work well when optimistic locking enabled and `locking_column`, without default value, is null in the database.
* | | | Fix destroy with locking_column value nullbogdanvlviv2017-06-201-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix destroying existing object does not work well when optimistic locking enabled and `locking column` is null in the database. Follow 22a822e5813ef7ea9ab6dbbb670a363899a083af, #28914
* | | | Use bulk INSERT to insert fixturesKir Shatrov2017-06-201-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Improves the performance from O(n) to O(1). Previously it would require 50 queries to insert 50 fixtures. Now it takes only one query. Disabled on sqlite which doesn't support multiple inserts.
* | | | Prevent making bind param if casted value is nilRyuta Kamizono2017-05-311-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If casted value is nil, generated SQL should be `IS NULL`. But currently it is generated as `= NULL`. To prevent this behavior, avoid making bind param if casted value is nil. Fixes #28945.
* | | | Deprecate passing arguments and block at the same time to `count` and `sum` ↵Ryuta Kamizono2017-05-291-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | in `ActiveRecord::Calculations` `select`, `count`, and `sum` in `Relation` are also `Enumerable` method that can be passed block. `select` with block already doesn't take arguments since 4fc3366. This is follow up of that.
* | | | Add a Monitor to ModelSchema#load_schemaMatthew Draper2017-05-251-0/+6
| | | | | | | | | | | | | | | | [Vikrant Chaudhary, David Abdemoulaie, Matthew Draper]
* | | | Cleanup CHANGELOGs [ci skip]Ryuta Kamizono2017-05-191-7/+7
| | | | | | | | | | | | | | | | | | | | * Fix indentation. * Add backticks.
* | | | Use recyclable cache keys (#29092)David Heinemeier Hansson2017-05-181-0/+9
| | | |
* | | | Changelog entry [ci-skip]Guillermo Iguaran2017-05-151-0/+4
| | | |
* | | | Add type caster to `RuntimeReflection#alias_name`Jon Moss2017-05-021-0/+6
| | | | | | | | | | | | | | | | | | | | Since we have been using this `Arel::Table` since 111ccc832bc977b15af12c14e7ca078dad2d4373, in order to properly handle queries, it's important that we properly type cast arguments.
* | | | Deprecate `supports_statement_cache?`Ryuta Kamizono2017-05-011-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `supports_statement_cache?` was introduced in 3.1.0.beta1 (104d0b2) for bind parameter substitution, but it is no longer used in 3.1.0.rc1 (73ff679). Originally it should respect `prepared_statements` rather than `supports_statement_cache?` (fd39847). One more thing, named `supports_statement_cache?` is pretty misreading. We have `StatementCache` and `StatementPool`. However, `supports_statement_cache?` doesn't mean `StatementCache`, but `StatementPool` unlike its name. https://github.com/rails/rails/blob/v5.1.0/activerecord/lib/active_record/statement_cache.rb https://github.com/rails/rails/blob/v5.1.0/activerecord/lib/active_record/connection_adapters/statement_pool.rb
* | | | Cleanup CHANGELOGs [ci skip]Ryuta Kamizono2017-04-301-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | * Remove trailing spaces. * Add backticks around method and command. * Fix indentation.
* | | | Merge pull request #28681 from runephilosof/fix-mysql-grantRafael Mendonça França2017-04-201-0/+4
|\ \ \ \ | | | | | | | | | | | | | | | Fix quoting in db:create grant all statement.
| * | | | Fix quoting in db:create grant all statement.Rune Schjellerup Philosof2017-04-201-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The database name used in the test would have actually shown this if it had tried to execute on a real Mysql instead of being stubbed out (dashes in database names needs quotes).
* | | | | Add additional raise UnknownMigrationVersionErrorbogdanvlviv2017-04-191-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | Raise error on the movement of migrations when the current migration does not exist.
* | | | | Fix `bin/rails db:forward` first migrationbogdanvlviv2017-04-191-0/+4
| | | | |
* | | | | Support Descending Indexes for MySQLRyuta Kamizono2017-04-161-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | MySQL 8.0.1 and higher supports descending indexes: `DESC` in an index definition is no longer ignored. See https://dev.mysql.com/doc/refman/8.0/en/descending-indexes.html.
* | | | | Fix inconsistency with changed attributes when overriding AR attribute readerbogdanvlviv2017-04-121-0/+4
| | | | |
* | | | | Passing in no arguments to the dynamic fixture accessor method returns all ↵Kevin McPhillips2017-04-071-0/+6
|/ / / / | | | | | | | | | | | | fixtures, not an empty array.
* | | | Remove CHANGELOG.md entry that appears in 5-1-stableJon Moss2017-04-011-9/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This CHANGELOG.md is a continuation of the 5-1-stable one, there shouldn't be any duplicate entries. [ci skip]
* | | | Load only needed records on ActiveRecord::Relation#inspectHendy Tanata2017-03-281-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Instead of loading all records and returning only a subset of those, just load the records as needed. Fixes #25537.
* | | | Start Rails 5.2 developmentMatthew Draper2017-03-221-771/+1
| | | |
* | | | Fix changelog entry about transaction error classes [ci skip]yuuji.yaginuma2017-03-201-1/+1
| | | | | | | | | | | | | | | | | | | | `ActiveRecord::TransactionSerializationError` was introduces in #25093. However, refactored in #25107, `TransactionSerializationError` is gone.
* | | | Merge pull request #28154 from aripollak/remove-comments-from-structure-sqlRafael Mendonça França2017-03-171-0/+7
|\ \ \ \ | | | | | | | | | | | | | | | Drop comments from structure.sql in postgresql
| * | | | Drop comments from structure.sql in postgresqlAri Pollak2017-02-241-0/+7
| | | | | | | | | | | | | | | | | | | | Fixes #28153.
* | | | | Merge pull request #28318 from ↵Rafael França2017-03-171-5/+0
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | bogdanvlviv/remove-ability-update-locking_column-value Remove ability update locking_column value
| * | | | | Remove ability update locking_column valuebogdanvlviv2017-03-161-5/+0
| | | | | |
* | | | | | Add :default option to belongs_to (#28453)George Claghorn2017-03-171-0/+14
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use it to specify that an association should be initialized with a particular record before validation. For example: # Before belongs_to :account before_validation -> { self.account ||= Current.account } # After belongs_to :account, default: -> { Current.account }
* | | | | Add missing credit [ci skip]Ryuta Kamizono2017-03-101-0/+2
| | | | |
* | | | | Merge pull request #28351 from kamipo/deprecate_schema_migrations_table_nameRafael Mendonça França2017-03-091-0/+4
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | Deprecate `Migrator.schema_migrations_table_name`
| * | | | | Deprecate `Migrator.schema_migrations_table_name`Ryuta Kamizono2017-03-091-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since 67fba0cf `SchemaMigration` model was extracted. Use `SchemaMigration.table_name` instead.
* | | | | | Fix select with block doesn't return newly built records in has_many associationRyuta Kamizono2017-03-091-0/+6
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The `select` in `QueryMethods` is also an enumerable method. Enumerable methods with block should delegate to `records` on `CollectionProxy`, not `scope`. Fixes #28348.
* | | | | Check whether `Rails.application` defined before calling itAndrew White2017-03-071-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In #27674 we changed the migration generator to generate migrations at the path defined in `Rails.application.config.paths` however the code checked for the presence of the `Rails` constant but not the `Rails.application` method which caused problems when using Active Record and generators outside of the context of a Rails application. Fixes #28325.
* | | | | Fix `deserialize` with JSON arrayRyuta Kamizono2017-03-061-0/+6
| | | | | | | | | | | | | | | | | | | | Fixes #28285.
* | | | | Fix `rake db:schema:load` with subdirectoriesRyuta Kamizono2017-03-051-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Related #25174. `db:schema:load` doesn't work with subdirectories like previous `db:migrate:status`. `Migrator.migration_files` should be used in `assume_migrated_upto_version` to fix the issue.
* | | | | Fix `rake db:migrate:status` with subdirectoriesRyuta Kamizono2017-03-041-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `db:migrate` supports subdirectories and have a test. https://github.com/rails/rails/blob/v5.1.0.beta1/activerecord/test/cases/migrator_test.rb#L78-L85 But `db:migrate:status` doesn't work with subdirectories. It is due to `Dir.foreach(path)` is not the same with `Dir["#{path}/**/[0-9]*_*.rb"]`. I extracted `migration_files` and sharing it in the both to fix the issue. And added tests for `db:migrate:status`.
* | | | | [ci skip] Add CHANGELOG entry for #28282Andrew White2017-03-041-0/+10
| | | | |
* | | | | Use `max_identifier_length` for `index_name_length` in PostgreSQL adapterRyuta Kamizono2017-02-271-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | Actually `index_name_length` depend on `max_identifier_length`, not always 63.
* | | | | Deprecate `supports_migrations?` on connection adaptersRyuta Kamizono2017-02-271-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `supports_migrations?` was added at 4160b518 to determine if schema statements (`create_table`, `drop_table`, etc) are implemented in the adapter. But all tested databases has been supported migrations since a4fc93c3 at least.
* | | | | [ci skip] Add CHANGELOG entry for #28183Andrew White2017-02-261-0/+4
|/ / / /
* | | | Deprecate using `#quoted_id` in quotingRyuta Kamizono2017-02-241-0/+4
| | | | | | | | | | | | | | | | | | | | Originally `quoted_id` was used in legacy quoting mechanism. Now we use type casting mechanism for that. Let's deprecate `quoted_id`.
* | | | Fix `wait_timeout` to configurable for mysql2 adapterRyuta Kamizono2017-02-241-0/+7
| | | | | | | | | | | | | | | | Fixes #26556.