diff options
Diffstat (limited to 'lib')
-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 |