From 7a068384b74813b3ea9a309d237c6ce8e8fde5d6 Mon Sep 17 00:00:00 2001 From: Nick Kallen Date: Sat, 17 May 2008 23:35:51 -0700 Subject: still faster --- lib/arel/extensions/object.rb | 4 ++++ lib/arel/predicates.rb | 2 +- lib/arel/primitives/attribute.rb | 6 +++++- lib/arel/primitives/value.rb | 4 ++++ 4 files changed, 14 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/arel/extensions/object.rb b/lib/arel/extensions/object.rb index 0382ca8027..9b66fcac4e 100644 --- a/lib/arel/extensions/object.rb +++ b/lib/arel/extensions/object.rb @@ -3,6 +3,10 @@ class Object Arel::Value.new(self, relation) end + def circle(relation) + bind(relation) + end + def to_sql(formatter) formatter.scalar self end diff --git a/lib/arel/predicates.rb b/lib/arel/predicates.rb index 3d01d5872f..48283e5d09 100644 --- a/lib/arel/predicates.rb +++ b/lib/arel/predicates.rb @@ -17,7 +17,7 @@ module Arel end def bind(relation) - self.class.new(relation[operand1] || operand1, relation[operand2] || operand2) + self.class.new(operand1.circle(relation), operand2.circle(relation)) end def to_sql(formatter = nil) diff --git a/lib/arel/primitives/attribute.rb b/lib/arel/primitives/attribute.rb index cb564c1587..eeea495b09 100644 --- a/lib/arel/primitives/attribute.rb +++ b/lib/arel/primitives/attribute.rb @@ -38,12 +38,16 @@ module Arel end def original_relation - original_attribute.relation + @original_relation ||= original_attribute.relation end def original_attribute @original_attribute ||= history.detect { |a| !a.join? } end + + def circle(relation) + relation[self] + end module Transformations def self.included(klass) diff --git a/lib/arel/primitives/value.rb b/lib/arel/primitives/value.rb index b4bddd0b0c..7751390be6 100644 --- a/lib/arel/primitives/value.rb +++ b/lib/arel/primitives/value.rb @@ -24,5 +24,9 @@ module Arel def bind(relation) Value.new(value, relation) end + + def circle(relation) + bind(relation) + end end end \ No newline at end of file -- cgit v1.2.3