aboutsummaryrefslogtreecommitdiffstats
path: root/lib/active_relation/relations/relation.rb
diff options
context:
space:
mode:
authorNick Kallen <nkallen@nick-kallens-computer-2.local>2008-02-23 19:29:18 -0800
committerNick Kallen <nkallen@nick-kallens-computer-2.local>2008-02-23 19:29:18 -0800
commit51fdd769c0cb096d6e6f04afc3ebb91833d625bc (patch)
tree9e6078f474ccf3424495e567cb39b232ce5c5d25 /lib/active_relation/relations/relation.rb
parentf10d3be703cada60783c671866dd48194b800002 (diff)
downloadrails-51fdd769c0cb096d6e6f04afc3ebb91833d625bc.tar.gz
rails-51fdd769c0cb096d6e6f04afc3ebb91833d625bc.tar.bz2
rails-51fdd769c0cb096d6e6f04afc3ebb91833d625bc.zip
Introduced concept of session. It does not yet support multiple databases, nor transactions, but it's a start!
Diffstat (limited to 'lib/active_relation/relations/relation.rb')
-rw-r--r--lib/active_relation/relations/relation.rb45
1 files changed, 28 insertions, 17 deletions
diff --git a/lib/active_relation/relations/relation.rb b/lib/active_relation/relations/relation.rb
index f20561c5b2..1d5e194923 100644
--- a/lib/active_relation/relations/relation.rb
+++ b/lib/active_relation/relations/relation.rb
@@ -2,18 +2,22 @@ module ActiveRelation
class Relation
include Sql::Quoting
- module Iteration
- include Enumerable
-
+ def session
+ Session.instance
+ end
+
+ module Enumerable
+ include ::Enumerable
+
def each(&block)
- connection.select_all(to_s).each(&block)
+ session.read(self).each(&block)
end
-
+
def first
- connection.select_one(to_s)
+ session.read(self).first
end
end
- include Iteration
+ include Enumerable
module Operations
def join(other)
@@ -58,18 +62,25 @@ module ActiveRelation
def rename(attribute, aliaz)
Rename.new(self, attribute => aliaz)
end
-
- def insert(record)
- Insertion.new(self, record)
- end
-
- def delete
- Deletion.new(self)
- end
-
+
def aggregate(*expressions)
AggregateOperation.new(self, expressions)
end
+
+ module Writes
+ def insert(record)
+ session.create Insertion.new(self, record); self
+ end
+
+ def update(assignments)
+ session.update Update.new(self, assignments); self
+ end
+
+ def delete
+ session.delete Deletion.new(self); self
+ end
+ end
+ include Writes
JoinOperation = Struct.new(:join_sql, :relation1, :relation2) do
def on(*predicates)
@@ -84,7 +95,7 @@ module ActiveRelation
end
end
include Operations
-
+
def aggregation?
false
end