aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arel
diff options
context:
space:
mode:
Diffstat (limited to 'lib/arel')
-rw-r--r--lib/arel/insert_manager.rb11
-rw-r--r--lib/arel/select_manager.rb8
-rw-r--r--lib/arel/visitors/dot.rb22
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