提交 71803320 编写于 作者: A Aaron Patterson

inserts are starting to take shape

上级 b1e7bd7d
...@@ -9,5 +9,8 @@ def into table ...@@ -9,5 +9,8 @@ def into table
@head.relation = table @head.relation = table
self self
end end
def columns; @head.columns end
def values; @head.values end
end end
end end
...@@ -13,7 +13,11 @@ def accept object ...@@ -13,7 +13,11 @@ def accept object
private private
def visit_Arel_Nodes_InsertStatement o def visit_Arel_Nodes_InsertStatement o
"INSERT INTO #{visit o.relation}" [
"INSERT INTO #{visit o.relation}",
("(#{o.columns.map { |x| visit x }.join ', '})" unless o.columns.empty?),
("VALUES (#{o.values.map { |x| quote visit x }.join ', '})" unless o.values.empty?),
].compact.join ' '
end end
def visit_Arel_Nodes_SelectStatement o def visit_Arel_Nodes_SelectStatement o
...@@ -42,6 +46,7 @@ def visit_Arel_Nodes_Equality o ...@@ -42,6 +46,7 @@ def visit_Arel_Nodes_Equality o
def visit_Arel_Attributes_Integer o def visit_Arel_Attributes_Integer o
"#{quote_table_name o.relation.name}.#{quote_column_name o.name}" "#{quote_table_name o.relation.name}.#{quote_column_name o.name}"
end end
alias :visit_Arel_Attributes_String :visit_Arel_Attributes_Integer
def visit_Fixnum o; o end def visit_Fixnum o; o end
alias :visit_String :visit_Fixnum alias :visit_String :visit_Fixnum
...@@ -61,6 +66,10 @@ def visit object ...@@ -61,6 +66,10 @@ def visit object
DISPATCH[const] = method DISPATCH[const] = method
end end
def quote value, column = nil
@connection.quote value, column
end
def quote_table_name name def quote_table_name name
@connection.quote_table_name name @connection.quote_table_name name
end end
......
...@@ -13,9 +13,7 @@ module Arel ...@@ -13,9 +13,7 @@ module Arel
manager = Arel::InsertManager.new Table.engine manager = Arel::InsertManager.new Table.engine
manager.into(Table.new(:users)).should == manager manager.into(Table.new(:users)).should == manager
end end
end
describe 'to_sql' do
it 'converts to sql' do it 'converts to sql' do
table = Table.new :users table = Table.new :users
manager = Arel::InsertManager.new Table.engine manager = Arel::InsertManager.new Table.engine
...@@ -25,5 +23,46 @@ module Arel ...@@ -25,5 +23,46 @@ module Arel
} }
end end
end end
describe 'columns' do
it "converts to sql" do
table = Table.new :users
manager = Arel::InsertManager.new Table.engine
manager.into table
manager.columns << table[:id]
manager.to_sql.should be_like %{
INSERT INTO "users" ("users"."id")
}
end
end
describe "values" do
it "converts to sql" do
table = Table.new :users
manager = Arel::InsertManager.new Table.engine
manager.into table
manager.values << 1
manager.to_sql.should be_like %{
INSERT INTO "users" VALUES (1)
}
end
end
describe "combo" do
it "puts shit together" do
table = Table.new :users
manager = Arel::InsertManager.new Table.engine
manager.into table
manager.values << 1
manager.values << "aaron"
manager.columns << table[:id]
manager.columns << table[:name]
manager.to_sql.should be_like %{
INSERT INTO "users" ("users"."id", "users"."name") VALUES (1, 'aaron')
}
end
end
end end
end end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册