From b707dddd89a61b86570cbe3a5e923bb8e436c38d Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Mon, 21 Mar 2011 21:35:23 -0700 Subject: allowing sql literals for values in insert statements --- History.txt | 1 + lib/arel/visitors/to_sql.rb | 6 +++++- test/test_insert_manager.rb | 9 +++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) 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 -- cgit v1.2.3