mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
inserts have the correct syntax
This commit is contained in:
parent
9fc70e22f9
commit
74a27a0d83
4 changed files with 56 additions and 9 deletions
|
@ -30,7 +30,7 @@ module Arel
|
|||
def insert values
|
||||
im = InsertManager.new @engine
|
||||
im.insert values
|
||||
raise
|
||||
@engine.connection.execute im.to_sql
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -15,8 +15,15 @@ module Arel
|
|||
def visit_Arel_Nodes_InsertStatement o
|
||||
[
|
||||
"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?),
|
||||
|
||||
("(#{o.columns.map { |x|
|
||||
quote_column_name x.name
|
||||
}.join ', '})" unless o.columns.empty?),
|
||||
|
||||
("VALUES (#{o.values.map { |value|
|
||||
value ? quote(visit(value)) : 'NULL'
|
||||
}.join ', '})" unless o.values.empty?),
|
||||
|
||||
].compact.join ' '
|
||||
end
|
||||
|
||||
|
@ -43,12 +50,15 @@ module Arel
|
|||
"#{visit o.left} = #{visit o.right}"
|
||||
end
|
||||
|
||||
def visit_Arel_Attributes_Integer o
|
||||
def visit_Arel_Attributes_Attribute o
|
||||
"#{quote_table_name o.relation.name}.#{quote_column_name o.name}"
|
||||
end
|
||||
alias :visit_Arel_Attributes_String :visit_Arel_Attributes_Integer
|
||||
alias :visit_Arel_Attributes_Integer :visit_Arel_Attributes_Attribute
|
||||
alias :visit_Arel_Attributes_String :visit_Arel_Attributes_Attribute
|
||||
alias :visit_Arel_Attributes_Time :visit_Arel_Attributes_Attribute
|
||||
|
||||
def visit_Fixnum o; o end
|
||||
alias :visit_Time :visit_Fixnum
|
||||
alias :visit_String :visit_Fixnum
|
||||
alias :visit_Arel_Nodes_SqlLiteral :visit_Fixnum
|
||||
alias :visit_Arel_SqlLiteral :visit_Fixnum # This is deprecated
|
||||
|
|
|
@ -9,13 +9,33 @@ module Arel
|
|||
end
|
||||
|
||||
describe 'insert' do
|
||||
it "inserts null" do
|
||||
table = Table.new(:users)
|
||||
manager = Arel::InsertManager.new Table.engine
|
||||
manager.insert [[table[:id], nil]]
|
||||
manager.to_sql.should be_like %{
|
||||
INSERT INTO "users" ("id") VALUES (NULL)
|
||||
}
|
||||
end
|
||||
|
||||
it "inserts time" do
|
||||
table = Table.new(:users)
|
||||
manager = Arel::InsertManager.new Table.engine
|
||||
|
||||
time = Time.now
|
||||
manager.insert [[table[:id], time]]
|
||||
manager.to_sql.should be_like %{
|
||||
INSERT INTO "users" ("id") VALUES (#{Table.engine.connection.quote time})
|
||||
}
|
||||
end
|
||||
|
||||
it 'takes a list of lists' do
|
||||
table = Table.new(:users)
|
||||
manager = Arel::InsertManager.new Table.engine
|
||||
manager.into table
|
||||
manager.insert [[table[:id], 1], [table[:name], 'aaron']]
|
||||
manager.to_sql.should be_like %{
|
||||
INSERT INTO "users" ("users"."id", "users"."name") VALUES (1, 'aaron')
|
||||
INSERT INTO "users" ("id", "name") VALUES (1, 'aaron')
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -24,7 +44,7 @@ module Arel
|
|||
manager = Arel::InsertManager.new Table.engine
|
||||
manager.insert [[table[:id], 1], [table[:name], 'aaron']]
|
||||
manager.to_sql.should be_like %{
|
||||
INSERT INTO "users" ("users"."id", "users"."name") VALUES (1, 'aaron')
|
||||
INSERT INTO "users" ("id", "name") VALUES (1, 'aaron')
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -57,7 +77,7 @@ module Arel
|
|||
manager.into table
|
||||
manager.columns << table[:id]
|
||||
manager.to_sql.should be_like %{
|
||||
INSERT INTO "users" ("users"."id")
|
||||
INSERT INTO "users" ("id")
|
||||
}
|
||||
end
|
||||
end
|
||||
|
@ -86,7 +106,7 @@ module Arel
|
|||
manager.columns << table[:id]
|
||||
manager.columns << table[:name]
|
||||
manager.to_sql.should be_like %{
|
||||
INSERT INTO "users" ("users"."id", "users"."name") VALUES (1, 'aaron')
|
||||
INSERT INTO "users" ("id", "name") VALUES (1, 'aaron')
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
17
spec/arel/visitors/to_sql_spec.rb
Normal file
17
spec/arel/visitors/to_sql_spec.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
require 'spec_helper'
|
||||
|
||||
module Arel
|
||||
module Visitors
|
||||
describe 'the to_sql visitor' do
|
||||
before do
|
||||
@visitor = ToSql.new Table.engine
|
||||
@attr = Table.new(:users)[:id]
|
||||
end
|
||||
|
||||
it "should visit visit_Arel_Attributes_Time" do
|
||||
attr = Attributes::Time.new(@attr.relation, @attr.name, @attr.column)
|
||||
@visitor.accept attr
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue