aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/preloader/through_association.rb
Commit message (Collapse)AuthorAgeFilesLines
* Remove useless preloader classesRyuta Kamizono2017-11-101-1/+1
| | | | | | | | | They are only different by one line of code which doesn't deserve a hierarchy of 7 classes. Closes #31079. [Ryuta Kamizono & Bogdan Gusiev]
* Don't expose internal methods in `Preloader::ThroughAssociation`Ryuta Kamizono2017-11-081-8/+7
| | | | `through_reflection` and `source_reflection` are used only in the class.
* Remove useless `associated_records_by_owner`Ryuta Kamizono2017-11-071-2/+2
| | | | | | | | `associated_records_by_owner` had returned customizing result before calling `associate_records_to_owner` for through association subclasses. Since #22115, `associate_records_to_owner` is called in the method and not returned owner and result pairs. Removing the method will reduce method call and block call nesting.
* Refactor Preloader CodeBogdan Gusiev2017-11-061-69/+38
|
* Fix preloading polymorphic multi-level through associationRyuta Kamizono2017-11-061-1/+7
| | | | | | | | | | | This is partially fixed by e617fb57 when through association has already loaded. Otherwise, second level through association should respect `preload_scope`. Fixes #30242. Closes #30076. [Ryuta Kamizono & CicholGricenchos]
* Fix preloading polymorphic association when through association has already ↵Ryuta Kamizono2017-11-061-4/+16
| | | | | | | | | | loaded If through association has already loaded, `source_type` is ignored to loaded through records. The loaded records should be filtered by `source_type` in that case. Fixes #30904.
* Remove unused delegation to `reflection.options` in `Preloader::Association`Ryuta Kamizono2017-09-181-0/+1
|
* Don't pass `reflection_scope` to `preload_scope` if `reflection.scope` isn't ↵Ryuta Kamizono2017-09-181-1/+3
| | | | | | | | | given Related 2b5f5cdd7c1d95716de6a206b6d09ccbb006dc17. If `reflection.scope` isn't given, `reflection_scope` is always empty scope. It is unnecessary to merge it.
* Return `through_scope` only if the scope is not empty scopeRyuta Kamizono2017-09-181-4/+2
| | | | | | | | | Related 2b5f5cdd7c1d95716de6a206b6d09ccbb006dc17. If `through_scope` is empty scope, it is unnecessary to merge it. And also, comparing relations is a little expensive (will cause `build_arel`). It is enough to use `empty_scope?` to determine whether empty scope.
* Remove useless condition in `reset_association`Ryuta Kamizono2017-09-181-2/+1
| | | | `through_scope` is not empty scope if `options[:source_type]` is given.
* Assigning `values` is only necessary when `reflection_scope.where_clause` is ↵Ryuta Kamizono2017-09-051-1/+1
| | | | | | not empty Because `reflection_scope.values` will create extra new hash.
* Fix preloading through association with custom scopeRyuta Kamizono2017-09-021-1/+6
| | | | | | | | | | If `reflection_scope.where_clause` is not empty, `through_scope` should be joined the source association. But if `values[:references]` in `reflection_scope` is empty, the source association will not be joined. It should use `source_reflection.table_name` in that case. Fixes #22535. Closes #28763.
* `values[:includes]` in `reflection_scope` is not compatible with `through_scope`Ryuta Kamizono2017-09-021-1/+6
| | | | | | | | | | | | | | | | | Without this fix, preloading `:comments_with_include` will cause the following error: ``` % bundle exec ruby -w -Itest test/cases/associations/eager_test.rb -n test_eager_with_has_many_through_join_model_with_include Using sqlite3 Run options: -n test_eager_with_has_many_through_join_model_with_include --seed 1502 E Error: EagerAssociationTest#test_eager_with_has_many_through_join_model_with_include: ActiveRecord::AssociationNotFoundError: Association named 'post' was not found on Post; perhaps you misspelled it? ```
* Don't call `scope.eager_loading?` when `reflection_scope.where_clause` is emptyRyuta Kamizono2017-09-021-10/+10
| | | | | If `reflection_scope.where_clause` is empty, `scope` isn't changed. So `scope.eager_loading?` is always false.
* Use frozen-string-literal in ActiveRecordKir Shatrov2017-07-191-0/+2
|
* Fix preloading association with scope including joinsRyuta Kamizono2017-07-041-3/+10
|
* Revert "Merge pull request #29540 from kirs/rubocop-frozen-string"Matthew Draper2017-07-021-1/+0
| | | | | This reverts commit 3420a14590c0e6915d8b6c242887f74adb4120f9, reversing changes made to afb66a5a598ce4ac74ad84b125a5abf046dcf5aa.
* Enforce frozen string in RubocopKir Shatrov2017-07-011-0/+1
|
* Merge pull request #29129 from kamipo/prevent_extra_through_scopeRafael França2017-06-281-2/+4
|\ | | | | Prevent extra `through_scope`
| * Prevent extra `through_scope`Ryuta Kamizono2017-05-181-2/+4
| | | | | | | | We can reuse `through_scope` for `reset_association`.
* | Don't expose methods and attrs for internal usageRyuta Kamizono2017-05-301-1/+1
|/
* Remove useless `target_records_from_association`Ryuta Kamizono2017-05-041-11/+3
| | | | Since through association is always loaded by `preloader.preload`.
* Add more rubocop rules about whitespacesRafael Mendonça França2016-10-291-3/+3
|
* Add `Style/EmptyLines` in `.rubocop.yml` and remove extra empty linesRyuta Kamizono2016-08-071-1/+0
|
* normalizes indentation and whitespace across the projectXavier Noria2016-08-061-32/+32
|
* Merge pull request #18766 from yasyf/issue_17864Sean Griffin2016-02-291-8/+15
|\ | | | | | | | | Honour joining model order in `has_many :through` associations when eager loading
| * Honour the order of the joining model in a `has_many :through`Yasyf Mohamedali2015-03-021-8/+15
| | | | | | | | | | | | | | | | | | association when eager loading. Previously, eager loading a `has_many :through` association with no defined order would return the records in the natural order of the database. Now, these records will be returned in the order that the joining record is returned, in case there is a defined order there.
* | Merge pull request #19423 from ↵Aaron Patterson2015-12-181-2/+7
|\ \ | | | | | | | | | | | | yuroyoro/fix_performance_regression_of_preloading_has_many_through_relation Fix #12537 performance regression when preloading has_many_through association
| * | Read already loaded association records from association.targetTomohito Ozaki2015-04-171-2/+7
| |/ | | | | | | | | For performance, Avoid instantiate CollectionProxy. Fixes #12537
* / Never pass `nil` to `order`Sean Griffin2015-10-291-1/+3
|/ | | | | | | | This is part of a refactoring to make it easier to allow `order` to use sanitize like just about everything else on relation. The deleted test doesn't give any reasoning as to why passing `nil` to `order` needs to be supported, and it's rather nonsensical. I can almost see allowing an empty string being passed (though I'm tempted to just disallow it...)
* Remove all references to `where_values` in association codeSean Griffin2015-01-251-3/+2
|
* Don't access the where values hash directly in through associationsSean Griffin2015-01-251-1/+1
| | | | See 4d7a62293e148604045a5f78a9d4312e79e90d13 for the reasoning
* Use bind values for joined tables in where statementsSean Griffin2014-11-011-0/+1
| | | | | | | | | | | | | | | In practical terms, this allows serialized columns and tz aware columns to be used in wheres that go through joins, where they previously would not behave correctly. Internally, this removes 1/3 of the cases where we rely on Arel to perform type casting for us. There were two non-obvious changes required for this. `update_all` on relation was merging its bind values with arel's in the wrong order. Additionally, through associations were assuming there would be no bind parameters in the preloader (presumably because the where would always be part of a join) [Melanie Gilman & Sean Griffin]
* Spelling errorsjbsmith862014-08-141-1/+1
|
* reset `@arel` when modifying a Relation in place.Yves Senn2014-04-241-1/+1
| | | | /cc @tenderlove
* Replace map.flatten with flat_map in activerecordErik Michaels-Ober2014-03-031-1/+1
|
* read the association instead of sendingAaron Patterson2013-10-141-1/+3
|
* simplify populating the ordering hashAaron Patterson2013-10-141-10/+5
|
* the preloader for the RHS has all the preloaded records, so ask itAaron Patterson2013-10-141-3/+3
|
* only calculate offset index once. #12537Aaron Patterson2013-10-141-6/+10
|
* Drop unused iterator varVipul A M2013-10-131-1/+1
|
* remove initialize methodAaron Patterson2013-09-251-4/+0
|
* extract association resetting to a methodAaron Patterson2013-09-251-9/+16
|
* always populate the preloaded records instance variable so we can removeAaron Patterson2013-09-251-7/+4
| | | | the @associated_records_by_owner ivar
* keep preloaded records in a list rather than extract from a hashAaron Patterson2013-09-251-2/+8
|
* all records have a preloaded, so eliminate that conditionalAaron Patterson2013-09-241-11/+7
|
* eliminate the `loaded?` conditionalAaron Patterson2013-09-241-3/+1
|
* push preloaded test up to the factory method so we can eliminateAaron Patterson2013-09-241-3/+3
| | | | conditionals from the individual preloaded classes
* we can't sort by lhs since the middle records have difference classesAaron Patterson2013-09-231-19/+19
| | | | and possibly different rules for finding those objects
* pass the preloader down so we only have to construct oneAaron Patterson2013-09-231-8/+6
|