aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #29513 from kirs/fixture-yaml-fallbackRafael França2017-06-211-5/+4
|\ | | | | Avoid begin/rescue in fixture quoting
| * Avoid begin/rescue in fixture quotingKir Shatrov2017-06-201-5/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Scalar values like arrays and hashes can't be inserted directly into table. Previously, the way to determine if the value is scalar was to try quoting it. If `quote` raised with an error than the value has to be converted to YAML. This flow is not very obvious. Ideally we could have a `quotable?` method in the connection, but I think that we can avoid begin/rescue block by simply checking if the value is Array or Hash. https://github.com/rails/rails/commit/aa31d21f5f4fc4d679e74a60f9df9706da7de373
* | Keep INNER JOIN when merging relationsMaxime Lapointe2017-06-201-3/+3
|/ | | | | | | | | | | | | | | | | 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-1/+1
| | | | | | `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-1/+1
| | | | | | | Fix destroying existing object does not work well when optimistic locking enabled and `locking column` is null in the database. Follow 22a822e5813ef7ea9ab6dbbb670a363899a083af, #28914
* Merge pull request #29504 from kirs/fixtures-arel-bulkRafael França2017-06-204-9/+74
|\ | | | | Use bulk INSERT to insert fixtures
| * Use bulk INSERT to insert fixturesKir Shatrov2017-06-204-9/+74
| | | | | | | | | | | | | | | | 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.
* | Merge pull request #28833 from bogdanvlviv/add-test-cases-for-optimistic-lockingRafael França2017-06-201-3/+4
|\ \ | |/ |/| Add test cases for optimistic locking
| * Clean up 'Optimistic Locking' implementationbogdanvlviv2017-06-121-3/+4
| |
* | Merge pull request #29454 from kamipo/fix_exists_queries_with_cacheRafael França2017-06-192-51/+0
|\ \ | | | | | | Fix `Relation#exists?` queries with query cache
| * | Ensure query caching for `select_*` methods in connection adaptersRyuta Kamizono2017-06-153-52/+1
| | |
| * | Fix `Relation#exists?` queries with query cacheRyuta Kamizono2017-06-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | If a connection adapter overrides `select_*` methods, query caching will doesn't work. This patch changes `select_value` to `select_one` in `Relation#exists?` to ensure query caching. Fixes #29449.
* | | Merge pull request #29494 from kamipo/prevent_extra_scope_constructionRafael França2017-06-193-3/+5
|\ \ \ | | | | | | | | Prevent extra `scope` construction in `find_target`
| * | | Prevent extra `scope` construction in `find_target`Ryuta Kamizono2017-06-183-3/+5
| | | | | | | | | | | | | | | | Because constructing `scope` is a little expensive.
* | | | Merge pull request #29486 from kirs/fixtures-arelRafael França2017-06-191-4/+11
|\ \ \ \ | |/ / / |/| | | Refactor #insert_fixtures to use Arel
| * | | Refactor #insert_fixtures to use ArelKir Shatrov2017-06-191-4/+11
| | | |
* | | | Merge pull request #29455 from kirs/remove-column-with-fk-mysqlGuillermo Iguaran2017-06-161-0/+7
|\ \ \ \ | | | | | | | | | | Remove FK together with column in MySQL
| * | | | Remove FK together with column in MySQLKir Shatrov2017-06-161-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Unlike with other databses, MySQL doesn't let you remove the column if there's a FK on this column. For better developer experience we want to remove the FK together with the column.
* | | | | Merge pull request #29392 from alexcameron89/unpersisted_create_associationMatthew Draper2017-06-171-0/+4
|\ \ \ \ \ | | | | | | | | | | | | Raise on create for singular association when parent is unpersisted
| * | | | | Raise on create for singular association when parent is unpersistedAlex Kitchens2017-06-081-0/+4
| |/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | A collection association will raise on `#create_association` when the parent is unpersisted. A singular association should do the same. This addresses issue #29219.
* | | | | Merge pull request #29431 from kamipo/fix_create_table_with_query_from_relationMatthew Draper2017-06-171-1/+6
|\ \ \ \ \ | | | | | | | | | | | | Fix `create_table` with query from relation
| * | | | | Fix `create_table` with query from relationRyuta Kamizono2017-06-131-1/+6
| | |_|_|/ | |/| | | | | | | | | | | | | | | | | | If a relation has binds, `connection.to_sql(relation)` without binds will generate invalid SQL. It should use `relation.to_sql` in that case.
* | | | | Merge pull request #29461 from dnl/unscope_where_orMatthew Draper2017-06-171-1/+1
|\ \ \ \ \ | |_|_|/ / |/| | | | Don't require 'unscope' to be the same on both sides of an 'or' relation
| * | | | Don't require 'unscope' to be the same for both sides of a 'or' relation.Dan Sherson2017-06-151-1/+1
| | | | |
* | | | | Merge pull request #29464 from eugeneius/raw_write_attributeRafael França2017-06-151-15/+6
|\ \ \ \ \ | | | | | | | | | | | | Don't map id to primary key in raw_write_attribute
| * | | | | Don't map id to primary key in raw_write_attributeEugene Kenny2017-06-151-15/+6
| |/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The `raw_write_attribute` method is used to update a record's attributes to reflect the new state of the database in `update_columns`. The hash provided to `update_columns` is turned into an UPDATE query directly, which means passing an `id` key results in an update to the `id` column, even if the model uses a different attribute as its primary key. When updating the record, we don't want to apply the `id` column change to the primary key attribute, since that's not what happened in the query. Without the code to handle this case, `write_attribute_with_type_cast` no longer contains any logic shared between `raw_write_attribute` and `write_attribute`, so we can inline the code into those two methods.
* | | | | Fix `dump_schema_information` with empty versionsRyuta Kamizono2017-06-151-1/+1
| | | | | | | | | | | | | | | | | | | | Fixes #29460.
* | | | | Remove deprecated option from docs [ci skip] (#29459)Vipul A M2017-06-151-6/+6
|/ / / /
* | | / Prevent extra `sync_with_transaction_state`Ryuta Kamizono2017-06-151-5/+2
| |_|/ |/| | | | | | | | | | | `sync_with_transaction_state` in `to_key` is unneeded because `id` also does.
* | | Merge pull request #29378 from kamipo/avoid_overwriting_id_attribute_methodsRafael França2017-06-141-7/+3
|\ \ \ | |/ / |/| | Avoid overwriting the methods of `AttributeMethods::PrimaryKey`
| * | Avoid overwriting the methods of `AttributeMethods::PrimaryKey`Ryuta Kamizono2017-06-071-7/+3
| |/ | | | | | | | | | | | | | | | | Currently the methods of `AttributeMethods::PrimaryKey` are overwritten by `define_attribute_methods`. It will be broken if a table that customized primary key has non primary key id column. It should not be overwritten if a table has any primary key. Fixes #29350.
* / Remove `null_allowed` option from doc [ci skip]yuuji.yaginuma2017-06-101-2/+1
|/ | | | This option was added in b9fa354. But it does not seem to work.
* [ci skip] UNIQUE constraint affects not only INSERT but also UPDATERyuta Kamizono2017-06-061-1/+1
|
* Don't mark the schema loaded until it's really finishedMatthew Draper2017-06-051-3/+5
| | | | | load_schema! is overridden by attribute modules, so we need to wait until it has returned.
* Merge pull request #29294 from gsamokovarov/attributes-defaultKasper Timm Hansen2017-06-045-21/+10
|\ | | | | Introduce mattr_accessor default option
| * Use mattr_accessor default: option throughout the projectGenadi Samokovarov2017-06-035-21/+10
| |
* | [ci skip] Add missing `be`Prathamesh Sonpatki2017-06-031-1/+1
|/
* Merge pull request #29135 from ↵Eileen M. Uchitelle2017-06-021-0/+19
|\ | | | | | | | | Nerian/document_support_for_composite_primary_keys Document support for composite primary keys
| * Document support for composite primary keysNerian2017-05-181-0/+19
| |
* | Merge pull request #29282 from ↵Eileen M. Uchitelle2017-06-022-8/+13
|\ \ | | | | | | | | | | | | kamipo/prevent_making_bind_param_if_casted_value_is_nil Prevent making bind param if casted value is nil
| * | Prevent making bind param if casted value is nilRyuta Kamizono2017-05-312-8/+13
| | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | Merge pull request #29220 from kamipo/consolidate_database_specific_json_typesMatthew Draper2017-06-017-45/+35
|\ \ \ | | | | | | | | Consolidate database specific JSON types to `Type::Json`
| * | | Consolidate database specific JSON types to `Type::Json`Ryuta Kamizono2017-05-307-45/+35
| | | |
* | | | Merge pull request #29293 from kamipo/fix_sti_with_default_scopeMatthew Draper2017-06-011-1/+5
|\ \ \ \ | | | | | | | | | | Fix `default_scoped` with defined `default_scope` on STI model
| * | | | Fix `default_scoped` with defined `default_scope` on STI modelRyuta Kamizono2017-05-311-1/+5
| | |/ / | |/| | | | | | | | | | | | | | | | | | | | | | This regression is caused by d1249c1. If STI model is defined `default_scope`, `base_rel` is not respected. I fixed to merge `base_rel` in that case.
* | | | Should use `quote` for a string literalRyuta Kamizono2017-06-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Follow up of #29077. Before: ```sql SELECT sql FROM sqlite_master WHERE tbl_name NOT IN ("foo") ORDER BY tbl_name, type DESC, name ``` After: ```sql SELECT sql FROM sqlite_master WHERE tbl_name NOT IN ('foo') ORDER BY tbl_name, type DESC, name ``` > If a keyword in double quotes (ex: "key" or "glob") is used in a context where it cannot be resolved to an identifier but where a string literal is allowed, then the token is understood to be a string literal instead of an identifier. http://www.sqlite.org/lang_keywords.html
* | | | Add missing `delegate :extending, to: :all`Ryuta Kamizono2017-06-011-1/+1
|/ / /
* | | Merge pull request #29261 from ↵Matthew Draper2017-05-317-29/+39
|\ \ \ | | | | | | | | | | | | | | | | kamipo/dont_expose_methods_and_attrs_for_internal_usage Don't expose methods and attrs for internal usage
| * | | Don't expose methods and attrs for internal usageRyuta Kamizono2017-05-307-29/+39
| |/ /
* / / Support PostgreSQL 10 `pg_sequence`Yasuo Honda2017-05-301-1/+9
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | Another fix for #28780 based on discussions at #28789 - In PostgreSQL 10 each sequence does not know its `min_value`. A new system catalog `pg_sequence` shows it as `seqmin`. Refer https://github.com/postgres/postgres/commit/1753b1b027035029c2a2a1649065762fafbf63f3 - `setval` 3rd argument needs to set to `false` only when the table has no rows to avoid `nextval(<sequence_name>)` returns `2` where `1` is expected. - `min_value` is only necessary when the table has no rows. It used to be necessary since the 3rd argument of `setval` is always `false`.