aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/merger.rb
Commit message (Collapse)AuthorAgeFilesLines
...
* partition the where values so we can access the removed onesAaron Patterson2013-05-201-1/+6
|
* eliminate some conditionalsAaron Patterson2013-05-201-3/+3
|
* change method name to reflect what it actually does.Aaron Patterson2013-05-201-2/+2
|
* save the where values in variables so we don't need to look them up allAaron Patterson2013-05-201-4/+5
| | | | the time
* pass where values to the helper function rather than rely on internal stateAaron Patterson2013-05-201-4/+4
|
* Extract JoinDependency#join_relation to DRY the repeated application of the ↵Ben Woosley2013-05-101-3/+1
| | | | #join_associations.
* extracted piece of code into a methodNeeraj Singh2013-05-081-13/+12
| | | | | | | | | | | | | | | | In order to fix #10421 I need to enable merge to take an option so that relations could be merged without making the last where condition to win. That fix would forever reside in 4-0-stable branch and would not be merged to master since using scope without lambda has been deprecated. In this commit I have extracted code into a method and I think it makes code look better. Hence the request to merge it in both master and 4-0-stable. If there is any concern then this code can be merged only in 4-0-stable and that would be fine too.
* Remove warningCarlos Antonio da Silva2013-04-101-2/+2
| | | | warning: `*' interpreted as argument prefix
* While merging relations preserve context for joinsJared Armstrong and Neeraj Singh2013-04-101-2/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes #3002. Also see #5494. ``` class Comment < ActiveRecord::Base belongs_to :post end class Author < ActiveRecord::Base has_many :posts end class Post < ActiveRecord::Base belongs_to :author has_many :comments end ``` `Comment.joins(:post).merge(Post.joins(:author).merge(Author.where(:name => "Joe Blogs"))).all` would fail with `ActiveRecord::ConfigurationError: Association named 'author' was not found on Comment`. It is failing because `all` is being called on relation which looks like this after all the merging: `{:joins=>[:post, :author], :where=>[#<Arel::Nodes::Equality: ....}`. In this relation all the context that `Post` was joined with `Author` is lost and hence the error that `author` was not found on `Comment`. Ths solution is to build JoinAssociation when two relations with join information are being merged. And later while building the arel use the previously built `JoinAssociation` record in `JoinDependency#graft` to build the right from clause. Thanks to Jared Armstrong (https://github.com/armstrjare) for most of the work. I ported it to make it compatible with new code base.
* Prevent Relation#merge from collapsing wheres on the RHSJon Leighton2013-01-271-17/+19
| | | | | | | | | | | | | | | | | | | | | | | This caused a bug with the new associations implementation, because now association conditions are represented as Arel nodes internally right up to when the whole thing gets turned to SQL. In Rails 3.2, association conditions get turned to raw SQL early on, which prevents Relation#merge from interfering. The current implementation was buggy when a default_scope existed on the target model, since we would basically end up doing: default_scope.merge(association_scope) If default_scope contained a where(foo: 'a') and association_scope contained a where(foo: 'b').where(foo: 'c') then the merger would see that the same column is representated on both sides of the merge and collapse the wheres to all but the last: where(foo: 'c') Now, the RHS of the merge is left alone. Fixes #8990
* performance improvements to joins!Aaron Patterson2012-10-121-2/+12
| | | | | | | | | | | | | | | | | | Before: Calculating ------------------------------------- ar 87 i/100ms ------------------------------------------------- ar 823.4 (±11.8%) i/s - 4089 in 5.070234s After: Calculating ------------------------------------- ar 88 i/100ms ------------------------------------------------- ar 894.1 (±3.9%) i/s - 4488 in 5.028161s Same test as 3a6dfca7f5f5bd45cea2f6ac348178e72423e1d5
* Speed up relation merging by reducing calls to Array#-Aaron Patterson2012-10-121-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | before: Calculating ------------------------------------- ar 83 i/100ms ------------------------------------------------- ar 832.1 (±4.0%) i/s - 4233 in 5.096611s after: Calculating ------------------------------------- ar 87 i/100ms ------------------------------------------------- ar 839.0 (±9.3%) i/s - 4176 in 5.032782s Benchmark: require 'config/environment' require 'benchmark/ips' GC.disable unless User.find_by_login('tater') u = User.new u.login = 'tater' u.save! end def active_record user = User.find_by_login('tater') starred = user.starred_items.count end active_record Benchmark.ips do |x| x.report("ar") { active_record } end
* Fix "last equality wins" logic in relation mergeErnie Miller2012-08-191-10/+5
| | | | | | This is a real fix (as compared to the band-aid in b127d86c), which uses the recently-added equality methods for ARel nodes. It has the side benefit of simplifying the merge code a bit.
* Fix merge error when Equality LHS is non-attributeErnie Miller2012-08-171-2/+5
| | | | | | | | | This is at best a band-aid for a more proper fix, since it won't truly handle the removal of the previous equality condition of these other nodes. I'm planning to put in some work on ARel toward supporting that goal. Related: rails/arel#130, ernie/squeel#153, ernie/squeel#156
* load active_support/core_ext/object/blank in active_support/railsXavier Noria2012-08-021-1/+0
|
* Add nodoc to HashMerger and MergerOscar Del Ben2012-07-171-2/+2
|
* Relation#from to accept other Relation objectsRadoslav Stankov2012-05-171-1/+2
| | | | Record.from("(#{sub_query.to_sql})") -> Record.from(sub_query) Record.from("(#{sub_query.to_sql}) a") -> Record.from(sub_query, :a)
* Revert "Merge pull request #5494 from ↵Jon Leighton2012-05-051-28/+3
| | | | | | | armstrjare/active_record_relation_keep_association_join_context_on_merge" This reverts commit dcd04e76179611a9db28c9e391aa7d6c2a5b046a, reversing changes made to 58a49875df63729f07a9a81d1ee349087d258df5.
* Allow ActiveRecord::Relation merges to maintain context of joined associationsJared Armstrong2012-05-041-3/+28
|
* fix interpolation for hash mergingJon Leighton2012-04-251-15/+24
|
* allow merging a single where valueJon Leighton2012-04-251-1/+1
|
* now we can just manipulate the values hash in #only and #exceptJon Leighton2012-04-131-10/+1
|
* remove apply_finder_options call from AssociationScopeJon Leighton2012-04-131-1/+1
|
* Make Relation#extending work like other value methodsJon Leighton2012-04-131-3/+1
|
* assert valid keysJon Leighton2012-04-131-0/+5
|
* Allow Relation#merge to take a hashJon Leighton2012-04-131-44/+69
|
* we have no need for the ASSOCIATION_METHODS constantJon Leighton2012-04-131-1/+1
|
* refactoringJon Leighton2012-04-131-36/+45
|
* Extract clusterfuck method for surgeryJon Leighton2012-04-131-0/+84