diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2010-08-13 18:28:38 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2010-08-13 18:28:38 -0700 |
commit | 9fc70e22f9bf7df8485b90b3d7e4a5c58cb0ebbb (patch) | |
tree | a237455c0390c59b9b8a7fabb2b811141c4d76d9 /lib/arel | |
parent | 3eeed18e0cb71f5a56995c2d6a67eff0af618deb (diff) | |
download | rails-9fc70e22f9bf7df8485b90b3d7e4a5c58cb0ebbb.tar.gz rails-9fc70e22f9bf7df8485b90b3d7e4a5c58cb0ebbb.tar.bz2 rails-9fc70e22f9bf7df8485b90b3d7e4a5c58cb0ebbb.zip |
insert manager implements "insert"
Diffstat (limited to 'lib/arel')
-rw-r--r-- | lib/arel/insert_manager.rb | 11 | ||||
-rw-r--r-- | lib/arel/select_manager.rb | 8 | ||||
-rw-r--r-- | lib/arel/visitors/dot.rb | 22 |
3 files changed, 35 insertions, 6 deletions
diff --git a/lib/arel/insert_manager.rb b/lib/arel/insert_manager.rb index d6c663a9c4..accabb4377 100644 --- a/lib/arel/insert_manager.rb +++ b/lib/arel/insert_manager.rb @@ -12,5 +12,16 @@ module Arel def columns; @head.columns end def values; @head.values end + + def insert fields + return if fields.empty? + + @head.relation ||= fields.first.first.relation + + fields.each do |column, value| + @head.columns << column + @head.values << value + end + end end end diff --git a/lib/arel/select_manager.rb b/lib/arel/select_manager.rb index c9484295d8..1728311d59 100644 --- a/lib/arel/select_manager.rb +++ b/lib/arel/select_manager.rb @@ -26,9 +26,11 @@ module Arel self end - def insert stuff - viz = Visitors::Dot.new - puts viz.accept stuff + # FIXME: this method should go away + def insert values + im = InsertManager.new @engine + im.insert values + raise end end end diff --git a/lib/arel/visitors/dot.rb b/lib/arel/visitors/dot.rb index 6fd2728839..4620920484 100644 --- a/lib/arel/visitors/dot.rb +++ b/lib/arel/visitors/dot.rb @@ -28,6 +28,17 @@ module Arel end private + def visit_Arel_Nodes_SelectCore o + visit_edge o, "froms" + visit_edge o, "projections" + visit_edge o, "wheres" + end + + def visit_Arel_Nodes_SelectStatement o + visit_edge o, "cores" + visit_edge o, "limit" + end + def visit_Arel_Table o visit_edge o, "name" end @@ -47,9 +58,14 @@ module Arel alias :visit_NilClass :visit_String def visit_Hash o - o.each_with_index do |(k,v),i| - edge("key_#{i}") { visit k } - edge("value_#{i}") { visit v } + o.each_with_index do |pair, i| + edge("pair_#{i}") { visit pair } + end + end + + def visit_Array o + o.each_with_index do |x,i| + edge(i) { visit x } end end |