aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
Commit message (Collapse)AuthorAgeFilesLines
* Add mysql and pg specific attributes to Column#== and hashSean Griffin2014-10-282-2/+20
|
* Merge pull request #17421 from rails/warn-with-heredocXavier Noria2014-10-2813-53/+103
|\ | | | | let warn with heredocs
| * let's warn with heredocsXavier Noria2014-10-2813-53/+103
| | | | | | | | | | | | | | | | | | | | | | | | The current style for warning messages without newlines uses concatenation of string literals with manual trailing spaces where needed. Heredocs have better readability, and with `squish` we can still produce a single line. This is a similar use case to the one that motivated defining `strip_heredoc`, heredocs are super clean.
* | Implement hash equality on columnSean Griffin2014-10-281-0/+5
| | | | | | | | | | | | The query cache uses bind values as hash keys. The current implementation relies on reference equality for hash equality. This is brittle, and can easily break in the future.
* | Implement #== for columnSean Griffin2014-10-281-0/+8
| | | | | | | | We shouldn't rely on reference equality of these objects in tests
* | Remove unneccessary default values from relation mergerSean Griffin2014-10-281-2/+2
| | | | | | | | The value methods will default to an empty array for us automatically
* | Fix uninitialized ivar warning in testsSean Griffin2014-10-281-1/+1
| |
* | Call value methods when merging relations, rather than accessing keysSean Griffin2014-10-281-14/+14
|/ | | | | | | | The change to accessing keys directly was originally added to allow `merge` to take a hash. The implementation of `HashMerger` no longer requires us to be doing so. Accessing the values directly makes it impossible to change internal storage details, even if shim methods are added temporarily
* Allow Relation#rewhere to work with infinite range valuesDan Olson2014-10-271-1/+1
|
* Merge pull request #17374 from maurogeorge/scope-exceptionYves Senn2014-10-271-0/+4
|\ | | | | | | Raises ArgumentError when try to define a scope without a callable
| * Raises ArgumentError when try to define a scope without a callableMauro George2014-10-231-0/+3
| | | | | | | | | | | | This changes the actual exception `NoMethodError: undefined method `call' for #<ActiveRecord::Relation []>` to a `ArgumentError` when try to define a scope without a callable.
* | Merge pull request #14143 from derekprior/dp-compound-index-orderingYves Senn2014-10-272-2/+2
|\ \ | | | | | | | | | | | | | | | | | | Use type column first in multi-column indexes Conflicts: activerecord/CHANGELOG.md
| * | Use type column first in multi-column indexesDerek Prior2014-10-242-2/+2
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `add_reference` can very helpfully add a multi-column index when you use it to add a polymorphic reference. However, the first column in the index is the `id` column, which is less than ideal. The [PostgreSQL docs][1] say: > A multicolumn B-tree index can be used with query conditions that > involve any subset of the index's columns, but the index is most > efficient when there are constraints on the leading (leftmost) > columns. The [MySQL docs][2] say: > MySQL can use multiple-column indexes for queries that test all the > columns in the index, or queries that test just the first column, the > first two columns, the first three columns, and so on. If you specify > the columns in the right order in the index definition, a single > composite index can speed up several kinds of queries on the same > table. In a polymorphic relationship, the type column is much more likely to be useful as the first column in an index than the id column. That is, I'm more likely to query on type without an id than I am to query on id without a type. [1]: http://www.postgresql.org/docs/9.3/static/indexes-multicolumn.html [2]: http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html
* | Merge pull request #17330 from DanOlson/rewhereMatthew Draper2014-10-271-1/+1
|\ \ | | | | | | Fix Relation#rewhere to work with Range values
| * | Fix Relation.rewhere to work with Range valuesDan Olson2014-10-201-1/+1
| | |
* | | Fix typo in error message when non-boolean value is assigned to boolean columnPrathamesh Sonpatki2014-10-261-1/+1
| | |
* | | Prefix internal method with _Rafael Mendonça França2014-10-255-14/+14
| | | | | | | | | | | | This will avoid naming clash with user defined methods
* | | Fix description of OID in TypeMapInitializerPrathamesh Sonpatki2014-10-251-1/+1
| |/ |/| | | | | [ci skip]
* | Remove duplicate 'select' database statementclaudiob2014-10-205-17/+3
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The `select` method has the same definition in almost all database adapters, so it can be moved from the database-specific adapters (PostgreSQl, MySQL, SQLite) to the abstract `database_statement`: ```ruby def select(sql, name = nil, binds = []) exec_query(sql, name, binds) end ``` --- More details about this commit: the only two DB-specific adapters that have a different definition of `select` are MySQLAdapter and MySQL2Adapter. In MySQLAdapter, `select` invokes `exec_query(sql, name, binds)`, so calling `super` achieves the same goal with less repetition. In MySQL2Adapter, `select` invokes `exec_query(sql, name)`, that is, it does not pass the `binds` parameter like other methods do. However, [MySQL2Adapter's `exec_query`](https://github.com/rails/rails/blob/74a527cc63ef56f3d0a42cf638299958dc7cb08c/activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb#L228L231) works exactly the same whether this parameters is passed or not, so the output does not change: ```ruby def exec_query(sql, name = 'SQL', binds = []) result = execute(sql, name) ActiveRecord::Result.new(result.fields, result.to_a) end ```
* Merge pull request #17019 from yuki24/add-class-name-to-unknown-attr-errorYves Senn2014-10-201-1/+1
|\ | | | | | | Message on AR::UnknownAttributeError should include the class name of a record
| * AR::UnknownAttributeError should include the class name of a recordYuki Nishijima2014-10-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This would be helpful if 2 models have an attribute that has a similar name to the other. e.g: before: User.new(name: "Yuki Nishijima", projects_attributes: [name: "kaminari"]) # => ActiveRecord::UnknownAttributeError: unknown attribute: name after: User.new(name: "Yuki Nishijima", projects_attributes: [name: "kaminari"]) # => ActiveRecord::UnknownAttributeError: unknown attribute on User: name
* | AR::UnknownAttributeError should include the class name of a recordYuki Nishijima2014-10-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This would be helpful if 2 models have an attribute that has a similar name to the other. e.g: before: User.new(name: "Yuki Nishijima", projects_attributes: [name: "kaminari"]) # => ActiveRecord::UnknownAttributeError: unknown attribute: name after: User.new(name: "Yuki Nishijima", projects_attributes: [name: "kaminari"]) # => ActiveRecord::UnknownAttributeError: unknown attribute on User: name
* | [ci skip] Make merge method nodocAnshul Sharma2014-10-201-8/+1
| |
* | [ci skip] merge docsAnshul Sharma2014-10-201-0/+7
| |
* | Add a deprecation warning for abiguous boolean valuesSean Griffin2014-10-161-1/+8
| | | | | | | | | | | | | | | | | | | | | | In Rails 5.0, we'd like to change the behavior of boolean columns in Rails to be closer to Ruby's semantics. Currently we have a small set of values which are "truthy", and all others are "falsy". In Rails 5.0, we will reverse this to have a small number of values which are "falsy", and all others will become "truthy". In the interim, all values which are ambiguous must emit a deprecation warning.
* | test, better describe `SerializationTypeMismatch` behavior. refs #14716.Yves Senn2014-10-161-2/+2
| |
* | docs, since #16702 we detect mutation on serialized attributes. [ci skip]Yves Senn2014-10-161-3/+0
| | | | | | | | /cc @sgrif
* | we don't need a HWIA and a hash allocated for just one k/v pairAaron Patterson2014-10-151-5/+3
| |
* | just look up the primary key from the columns hashAaron Patterson2014-10-151-6/+1
| |
* | add table.bigint supportAaron Patterson2014-10-152-1/+2
|/ | | | | | | | In the DSL you can now do: create_table(:foos) do |t| t.bigint :hi end
* Use if/else instead of early raiseRafael Mendonça França2014-10-151-2/+5
|
* Merge pull request #17267 from rebyn/masterRafael Mendonça França2014-10-152-0/+7
|\ | | | | | | Raise an error for has_one associations which try to go :through a polymorphic association
| * Raise an error for has_one associations which try to go :through a ↵Tu Hoang2014-10-152-0/+7
| | | | | | | | polymorphic association [#17263]
* | delete leftover JoinOperation structswapdisc2014-10-141-2/+0
|/
* Make the config actually copyableGodfrey Chan2014-10-141-1/+1
| | | The intention here is to make the required config copy-able from the console/logs, so add a newline at the end of the message to make that easier. (Otherwise it would be `... raise_in_transactional_callbacks = true (called from...`.)
* make sure cache is not used for collection assocations tooAaron Patterson2014-10-141-1/+6
| | | | follow up for #17052
* break cache if we're inside a "scoping" call. fixes #17052Aaron Patterson2014-10-141-1/+6
| | | | | For now, we don't want to take "scoping" calls in to account when calculating cache keys for relations, so just opt-out.
* Clarify `#update_all` doc about value processingNicolas Cavigneaux2014-10-141-1/+2
| | | | | | | | | This clarify the fact that `#update_all` doesn't type-cast passed values and that these values are written as-is in the SQL DB. Fix #17242 [ci skip]
* Merge pull request #17251 from claudiob/remove-duplicate-exceptionRafael Mendonça França2014-10-131-6/+10
|\ | | | | Remove duplicate error message "Couldn't find..."
| * Remove duplicate error message "Couldn't find..."claudiob2014-10-131-6/+10
| | | | | | | | | | | | | | | | | | This commit removes the duplication of the error message: > Couldn't find #{@klass.name} with [#{arel.where_sql}] introduced in #15791 by adding a private method `find_nth!` that deals with all the method like `first!` and `second!`.
* | measure record instantiation time in AS::NotificationsAaron Patterson2014-10-132-4/+22
| | | | | | | | | | emit an event when we instantiate AR objects so we can see how many records were instantiated and how long it took
* | add length to ActiveRecord::ResultAaron Patterson2014-10-131-0/+4
| |
* | Autosave callbacks shouldn't be `after_save`Agis-2014-10-131-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | 068f092ced8483e557725542dd919ab7c516e567 registered autosave callbacks as `after_save` callbacks. This caused the regression described in #17209. Autosave callbacks should be registered as `after_update` and `after_create` callbacks, just like before. This is a partial revert of 068f092ced8483e557725542dd919ab7c516e567. Fixes #17209.
* | Merge pull request #17014 from grosser/grosser/fast-fixturesAaron Patterson2014-10-101-34/+2
|\ \ | |/ |/| speed up fixtures by not loading all their classes
| * speed up fixtures by not loading all their classesgrosser2014-10-061-34/+2
| |
* | Merge pull request #17146 from divineforest/active-record-gsub-to-trRafael Mendonça França2014-10-072-2/+2
|\ \ | | | | | | Change `gsub` to `tr` where possible
| * | Change `gsub` to `tr` where possibleAlexander Balashov2014-10-062-2/+2
| | |
* | | [ci skip] Clarify deletion strategies for collection proxieseileencodes2014-10-041-17/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For detailed testing of behavior see: https://gist.github.com/eileencodes/5b0a2fe011dcff6203fe This shows destroy_all always destroys records and fires callbacks. It will never use nullify or delete_all delete_all's behavior varies greatly based on `hm` vs `hm:t` and deletion strategy.
* | | Merge pull request #16409 from ↵Zachary Scott2014-10-032-6/+10
|\ \ \ | |/ / |/| | | | | | | | justinweiss/update_validation_context_documentation Docs: Add a note on custom validation contexts. [ci skip]
| * | Add a note on custom validation contexts.Justin Weiss2014-08-052-6/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | The documentation on `:on` for validations was inconsistent, and most only referenced the `:create` and `:update` contexts. I fixed those to be consistent with the documentation on `AM::Validations.validates`, which seemed to have the best docs. [ci skip]