diff options
author | Nick Kallen <nkallen@nick-kallens-computer-2.local> | 2008-02-23 19:29:18 -0800 |
---|---|---|
committer | Nick Kallen <nkallen@nick-kallens-computer-2.local> | 2008-02-23 19:29:18 -0800 |
commit | 51fdd769c0cb096d6e6f04afc3ebb91833d625bc (patch) | |
tree | 9e6078f474ccf3424495e567cb39b232ce5c5d25 /lib/active_relation/relations/relation.rb | |
parent | f10d3be703cada60783c671866dd48194b800002 (diff) | |
download | rails-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.rb | 45 |
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 |