aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-03-21 21:35:23 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2011-03-21 21:35:23 -0700
commitb707dddd89a61b86570cbe3a5e923bb8e436c38d (patch)
tree62eb89e45a3667e5bfbd21efaea59af6fff9e7c8
parent4dade480a1d19b1343de8c68b94f74a1237c396a (diff)
downloadrails-b707dddd89a61b86570cbe3a5e923bb8e436c38d.tar.gz
rails-b707dddd89a61b86570cbe3a5e923bb8e436c38d.tar.bz2
rails-b707dddd89a61b86570cbe3a5e923bb8e436c38d.zip
allowing sql literals for values in insert statements
-rw-r--r--History.txt1
-rw-r--r--lib/arel/visitors/to_sql.rb6
-rw-r--r--test/test_insert_manager.rb9
3 files changed, 15 insertions, 1 deletions
diff --git a/History.txt b/History.txt
index 9c0d3198a1..3937f6b5b7 100644
--- a/History.txt
+++ b/History.txt
@@ -10,6 +10,7 @@
* Add Arel::SelectManager#offset
* Add Arel::SelectManager#offset=
* Added Arel::SelectManager#create_insert for building an insert manager.
+ * SQL Literals are allowed for values in INSERT statements.
* Math operations have been added to attributes, thanks to
Vladimir Meremyanin.
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index 1c91d7f5e6..bbb2c54655 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -102,7 +102,11 @@ key on UpdateManager using UpdateManager#key=
def visit_Arel_Nodes_Values o
"VALUES (#{o.expressions.zip(o.columns).map { |value, attr|
- quote(value, attr && column_for(attr))
+ if Nodes::SqlLiteral === value
+ visit_Arel_Nodes_SqlLiteral value
+ else
+ quote(value, attr && column_for(attr))
+ end
}.join ', '})"
end
diff --git a/test/test_insert_manager.rb b/test/test_insert_manager.rb
index f3900da4e0..4878a33c90 100644
--- a/test/test_insert_manager.rb
+++ b/test/test_insert_manager.rb
@@ -19,6 +19,15 @@ module Arel
assert_equal %w{ c d }, values.right
end
+ it 'allows sql literals' do
+ table = Table.new(:users)
+ manager = Arel::InsertManager.new Table.engine
+ manager.values = manager.create_values [Arel.sql('*')], %w{ a }
+ manager.to_sql.must_be_like %{
+ INSERT INTO NULL VALUES (*)
+ }
+ end
+
it "inserts false" do
table = Table.new(:users)
manager = Arel::InsertManager.new Table.engine