aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/join_dependency.rb
Commit message (Collapse)AuthorAgeFilesLines
...
* Merge pull request #15210 from arthurnn/fix_hbtm_reflectionArthur Neves2014-05-241-1/+1
| | | | | | | | | Fix habtm reflection Conflicts: activerecord/CHANGELOG.md activerecord/lib/active_record/counter_cache.rb activerecord/lib/active_record/reflection.rb activerecord/test/cases/reflection_test.rb
* deprecate, join, preload, eager load of instance dependent associations.Yves Senn2014-05-101-0/+1
| | | | | | | Closes #15024. These operations happen before instances are created. The current behavior is misleading and can result in broken behavior.
* Merge branch 'master' into adequaterecordAaron Patterson2014-02-171-6/+6
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * master: (311 commits) Add a missing changelog entry for #13981 and #14035 Revert "Fixed plugin_generator test" implements new option :month_format_string for date select helpers [Closes #13618] add factory methods for empty alias trackers guarantee a list in the alias tracker so we can remove a conditional stop exposing table_joins make most parameters to the AliasTracker required make a singleton for AssociationScope pass the association and connection to the scope method pass the tracker down the stack and construct it in the scope method clean up add_constraints signature remove the reflection delegate remove klass delegator remove railties changes. fixes #14054 remove chain delegate remove scope_chain delegate Add verb to sanitization note fix path shown in mailer's templates updated Travis build status image url fix guide active_support_core_extensions. add Note to String#indent [ci skip] ... Conflicts: activerecord/lib/active_record/associations/join_dependency.rb activerecord/test/cases/associations/association_scope_test.rb
| * add factory methods for empty alias trackersAaron Patterson2014-02-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we know the alias tracker is empty, we can create one that doesn't use a hash with default block for counting. ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:') ActiveRecord::Schema.define do create_table :posts, force: true do |t| t.integer :comments_count end create_table :comments, force: true do |t| t.integer :post_id end end class Post < ActiveRecord::Base; has_many :comments; end class Comment < ActiveRecord::Base; belongs_to :post, counter_cache: true; end 10.times { Comment.create!(post: Post.create!) } record = Post.first association_name = :comments Benchmark.ips do |x| reflection = record.class.reflect_on_association(association_name) association = reflection.association_class.new(record, reflection) x.report('assoc') do reflection.association_class.new(record, reflection) end x.report('reader') do association.reader;nil end x.report('combined') do reflection.association_class.new(record, reflection).reader;nil end end [aaron@higgins rails (tracker)]$ TEST=ips bundle exec ruby ../1bb5456b5e035343df9d/gistfile1.rb -- create_table(:posts, {:force=>true}) -> 0.0062s -- create_table(:comments, {:force=>true}) -> 0.0003s Calculating ------------------------------------- assoc 833 i/100ms reader 28703 i/100ms combined 839 i/100ms ------------------------------------------------- assoc 9010.3 (±3.8%) i/s - 44982 in 5.000022s reader 3214523.4 (±5.5%) i/s - 16016274 in 5.001136s combined 8841.0 (±5.8%) i/s - 44467 in 5.049269s [aaron@higgins rails (tracker)]$ TEST=ips bundle exec ruby ../1bb5456b5e035343df9d/gistfile1.rb -- create_table(:posts, {:force=>true}) -> 0.0060s -- create_table(:comments, {:force=>true}) -> 0.0003s Calculating ------------------------------------- assoc 888 i/100ms reader 29217 i/100ms combined 900 i/100ms ------------------------------------------------- assoc 9674.3 (±3.3%) i/s - 48840 in 5.054022s reader 2988474.8 (±6.9%) i/s - 14842236 in 4.998230s combined 9674.0 (±3.1%) i/s - 48600 in 5.028694s
| * make most parameters to the AliasTracker requiredAaron Patterson2014-02-141-1/+1
| | | | | | | | | | This helps with our sanity. The class is internal, we can refactor to a "nice" API later.
| * Avoid using deprecated arel constantsRafael Mendonça França2014-02-101-2/+2
| |
* | bubble bind parameters up when building join dependenciesAaron Patterson2014-01-131-4/+4
|/
* Make outer joins on proper parentWashington Luiz2013-12-311-1/+1
| | | | | Outer joins were being built on the root relation klass rather than the one specified in the join dependency root
* tyopAkira Matsuda2013-11-261-1/+1
|
* Change syntax format for example returned valuesPrem Sichanugrist2013-11-111-6/+6
| | | | | | | | | According to our guideline, we leave 1 space between `#` and `=>`, so we want `# =>` instead of `#=>`. Thanks to @fxn for the suggestion. [ci skip]
* move helper class to the topAaron Patterson2013-10-211-42/+42
|
* build the association graph functionallyAaron Patterson2013-10-211-16/+9
| | | | This lets us avoid the constant calls to Array#<<
* @base_klass is not usedAaron Patterson2013-10-211-1/+0
|
* join_type isn't used on the node anymoreAaron Patterson2013-10-211-6/+6
|
* make joins generation method look similarAaron Patterson2013-10-211-6/+9
|
* remove node duping codeAaron Patterson2013-10-211-57/+19
|
* refactor outer join generationAaron Patterson2013-10-211-11/+6
|
* add outer joins for matching nodesAaron Patterson2013-10-211-2/+14
|
* construct joins by walking the outer join treeAaron Patterson2013-10-211-5/+34
|
* pass the outer joins to join_constraintsAaron Patterson2013-10-201-1/+2
|
* disconnect join_constraints from the instanceAaron Patterson2013-10-201-1/+1
|
* pass in scope chain so reflection is not neededAaron Patterson2013-10-201-1/+1
|
* pass the foreign table and class to the join_constraints methodAaron Patterson2013-10-201-1/+3
|
* pass the join type to the join_constraints methodAaron Patterson2013-10-201-1/+2
|
* use the node as cache so we can avoid accessing the tableAaron Patterson2013-10-151-13/+13
|
* apply tables to the whole tree from the outsideAaron Patterson2013-10-151-14/+8
|
* apply table aliases after the AST has been builtAaron Patterson2013-10-151-1/+13
|
* stop reversing tables until we absolutely mustAaron Patterson2013-10-151-1/+1
|
* pass the chain the join_constraintsAaron Patterson2013-10-151-1/+2
|
* move column_names_with_alias on to the alias cache objectAaron Patterson2013-10-141-8/+18
|
* keep a cache on the alias objectAaron Patterson2013-10-141-11/+21
|
* move alias building to the table nodeAaron Patterson2013-10-141-4/+8
|
* let the Table class build the ARel alias nodesAaron Patterson2013-10-141-4/+9
|
* store aliases in a better structureAaron Patterson2013-10-141-4/+17
|
* unhook `join_constraints` from the @tables ivarAaron Patterson2013-10-131-1/+1
|
* push the node->AR cache up one levelAaron Patterson2013-10-131-10/+11
|
* remove dead codeAaron Patterson2013-10-111-5/+0
|
* remove useless codeAaron Patterson2013-10-111-24/+20
| | | | | turns out that the activerecord object will always have the same id as the row from which it was constructed
* the parent hash keeps the records unique alreadyAaron Patterson2013-10-111-4/+3
|
* keep track of AR objects we've made as we walk the treeAaron Patterson2013-10-111-35/+22
| | | | | Remove duplicate removal code because we avoid adding duplicates as we walk the tree the first time
* push up the loaded target checkingAaron Patterson2013-10-111-9/+13
|
* we always have a model nowAaron Patterson2013-10-111-1/+1
|
* extract conditional to the callerAaron Patterson2013-10-111-11/+13
|
* we always have a reflection and it is on the nodeAaron Patterson2013-10-111-2/+2
|
* fix variable name. we're constructing a model, not an associationAaron Patterson2013-10-111-12/+12
|
* reflections know if they are collections, so askAaron Patterson2013-10-111-6/+5
| | | | | We don't need to poke at the macro to figure out if we should look for a cached record or not
* belongs_to can be treated the same way as has_oneAaron Patterson2013-10-111-12/+5
|
* cache the primary key / typcast lookup on the stackAaron Patterson2013-10-111-9/+9
|
* remove dead code / make duplicate code more obviousAaron Patterson2013-10-111-4/+4
|
* pull parent and alias tacker from the nodes.Aaron Patterson2013-10-111-1/+18
| | | | For now, we'll set the tables on the nodes manually.