diff options
author | Nick Kallen <nkallen@nick-kallens-computer-2.local> | 2008-05-17 14:43:27 -0700 |
---|---|---|
committer | Nick Kallen <nkallen@nick-kallens-computer-2.local> | 2008-05-17 14:43:27 -0700 |
commit | 2e252c4cc8003489185658db1b76bee69be4a010 (patch) | |
tree | 2df7a9553013c272bcbd4cc171b2001e3e416fb6 /lib/arel | |
parent | 3f55d33e530da1b5c454e0cfe920462d497649c8 (diff) | |
download | rails-2e252c4cc8003489185658db1b76bee69be4a010.tar.gz rails-2e252c4cc8003489185658db1b76bee69be4a010.tar.bz2 rails-2e252c4cc8003489185658db1b76bee69be4a010.zip |
slight performance improvement
Diffstat (limited to 'lib/arel')
-rw-r--r-- | lib/arel/extensions/class.rb | 6 | ||||
-rw-r--r-- | lib/arel/primitives/attribute.rb | 8 | ||||
-rw-r--r-- | lib/arel/relations/compound.rb | 7 | ||||
-rw-r--r-- | lib/arel/relations/order.rb | 8 | ||||
-rw-r--r-- | lib/arel/relations/selection.rb | 2 | ||||
-rw-r--r-- | lib/arel/sessions/session.rb | 5 | ||||
-rw-r--r-- | lib/arel/sql/christener.rb | 5 |
7 files changed, 21 insertions, 20 deletions
diff --git a/lib/arel/extensions/class.rb b/lib/arel/extensions/class.rb index fed2ef79c7..48d07a45f9 100644 --- a/lib/arel/extensions/class.rb +++ b/lib/arel/extensions/class.rb @@ -1,9 +1,11 @@ class Class - def hash_on(delegatee) + def hash_on(*delegatees) define_method :eql? do |other| self == other end - delegate :hash, :to => delegatee + define_method :hash do + @hash ||= delegatees.map(&:hash).sum + end end end
\ No newline at end of file diff --git a/lib/arel/primitives/attribute.rb b/lib/arel/primitives/attribute.rb index bb951638e4..f3291b18da 100644 --- a/lib/arel/primitives/attribute.rb +++ b/lib/arel/primitives/attribute.rb @@ -46,8 +46,14 @@ module Arel end module Transformations + delegate :size, :to => :history + def self.included(klass) - klass.hash_on :name + klass.send :alias_method, :eql?, :== + end + + def hash + @hash ||= history.size + name.hash + relation.hash end def as(aliaz = nil) diff --git a/lib/arel/relations/compound.rb b/lib/arel/relations/compound.rb index 6f230c3f57..55b2bc80c7 100644 --- a/lib/arel/relations/compound.rb +++ b/lib/arel/relations/compound.rb @@ -10,12 +10,7 @@ module Arel def attributes @attributes ||= relation.attributes.collect { |a| a.bind(self) } end - - def selects - @selects ||= relation.selects.collect { |s| s.bind(self) } - end - - # XXX + def relation_for(attribute) join? && relation.relation_for(attribute) || self[attribute] && self end diff --git a/lib/arel/relations/order.rb b/lib/arel/relations/order.rb index 662d3740df..2d72127722 100644 --- a/lib/arel/relations/order.rb +++ b/lib/arel/relations/order.rb @@ -6,14 +6,14 @@ module Arel @relation, @orderings = relation, orderings.collect { |o| o.bind(relation) } end + def orders + orderings + relation.orders + end + def ==(other) self.class == other.class and relation == other.relation and orderings == other.orderings end - - def orders - orderings + relation.orders - end end end
\ No newline at end of file diff --git a/lib/arel/relations/selection.rb b/lib/arel/relations/selection.rb index a37f51c9ec..c50db1c88a 100644 --- a/lib/arel/relations/selection.rb +++ b/lib/arel/relations/selection.rb @@ -9,7 +9,7 @@ module Arel end def selects - (relation.selects + [predicate]).collect { |p| p.bind(self) } + @selects ||= (relation.selects + [predicate]).collect { |p| p.bind(self) } end def ==(other) diff --git a/lib/arel/sessions/session.rb b/lib/arel/sessions/session.rb index 9c61d0cba1..8b72fd1fe6 100644 --- a/lib/arel/sessions/session.rb +++ b/lib/arel/sessions/session.rb @@ -29,10 +29,9 @@ module Arel end def read(select) - @read ||= Hash.new do |hash, select| + (@read ||= Hash.new do |hash, select| hash[select] = select.call(select.engine.connection) - end - @read[select] + end)[select] end def update(update) diff --git a/lib/arel/sql/christener.rb b/lib/arel/sql/christener.rb index d0dbf47eaf..5883a75f41 100644 --- a/lib/arel/sql/christener.rb +++ b/lib/arel/sql/christener.rb @@ -3,11 +3,10 @@ module Arel class Christener def name_for(relation) @used_names ||= Hash.new(0) - @relation_names ||= Hash.new do |hash, relation| + (@relation_names ||= Hash.new do |hash, relation| @used_names[name = relation.name] += 1 hash[relation] = name + (@used_names[name] > 1 ? "_#{@used_names[name]}" : '') - end - @relation_names[relation.table] + end)[relation.table] end end end |