diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2012-02-20 17:57:37 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2012-02-20 17:57:37 -0800 |
commit | 33f03c5557526d54c2b0053c79ea0e837016aef5 (patch) | |
tree | 2f98fab9b03e76a84195345c2a4571177b618960 | |
parent | cbdc7e72ba48672f6c43627de1d081e61c6c10b0 (diff) | |
download | rails-33f03c5557526d54c2b0053c79ea0e837016aef5.tar.gz rails-33f03c5557526d54c2b0053c79ea0e837016aef5.tar.bz2 rails-33f03c5557526d54c2b0053c79ea0e837016aef5.zip |
bind parameters can be differentiated from sql literals
-rw-r--r-- | lib/arel/nodes/sql_literal.rb | 3 | ||||
-rw-r--r-- | lib/arel/visitors/depth_first.rb | 1 | ||||
-rw-r--r-- | lib/arel/visitors/dot.rb | 1 | ||||
-rw-r--r-- | lib/arel/visitors/to_sql.rb | 1 | ||||
-rw-r--r-- | test/nodes/test_node.rb | 1 | ||||
-rw-r--r-- | test/visitors/test_to_sql.rb | 6 |
6 files changed, 13 insertions, 0 deletions
diff --git a/lib/arel/nodes/sql_literal.rb b/lib/arel/nodes/sql_literal.rb index 2e934b2a1b..1bae8c9366 100644 --- a/lib/arel/nodes/sql_literal.rb +++ b/lib/arel/nodes/sql_literal.rb @@ -6,5 +6,8 @@ module Arel include Arel::AliasPredication include Arel::OrderPredications end + + class BindParam < SqlLiteral + end end end diff --git a/lib/arel/visitors/depth_first.rb b/lib/arel/visitors/depth_first.rb index 43d186cc1a..d1ae524db4 100644 --- a/lib/arel/visitors/depth_first.rb +++ b/lib/arel/visitors/depth_first.rb @@ -109,6 +109,7 @@ module Arel alias :visit_Arel_Nodes_Lock :terminal alias :visit_Arel_Nodes_Node :terminal alias :visit_Arel_Nodes_SqlLiteral :terminal + alias :visit_Arel_Nodes_BindParam :terminal alias :visit_Arel_SqlLiteral :terminal alias :visit_BigDecimal :terminal alias :visit_Bignum :terminal diff --git a/lib/arel/visitors/dot.rb b/lib/arel/visitors/dot.rb index 8303279211..001843d8ba 100644 --- a/lib/arel/visitors/dot.rb +++ b/lib/arel/visitors/dot.rb @@ -65,6 +65,7 @@ module Arel visit_edge o, "expr" end alias :visit_Arel_Nodes_Group :unary + alias :visit_Arel_Nodes_BindParam :unary alias :visit_Arel_Nodes_Grouping :unary alias :visit_Arel_Nodes_Having :unary alias :visit_Arel_Nodes_Limit :unary diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb index 260cb6959f..29df72ff97 100644 --- a/lib/arel/visitors/to_sql.rb +++ b/lib/arel/visitors/to_sql.rb @@ -374,6 +374,7 @@ key on UpdateManager using UpdateManager#key= def literal o; o end + alias :visit_Arel_Nodes_BindParam :literal alias :visit_Arel_Nodes_SqlLiteral :literal alias :visit_Arel_SqlLiteral :literal # This is deprecated alias :visit_Bignum :literal diff --git a/test/nodes/test_node.rb b/test/nodes/test_node.rb index b8d06b9ccc..335cba8aab 100644 --- a/test/nodes/test_node.rb +++ b/test/nodes/test_node.rb @@ -11,6 +11,7 @@ module Arel Nodes.const_get(k) }.grep(Class).each do |klass| next if Nodes::SqlLiteral == klass + next if Nodes::BindParam == klass next if klass.name =~ /^Arel::Nodes::Test/ assert klass.ancestors.include?(Nodes::Node), klass.name end diff --git a/test/visitors/test_to_sql.rb b/test/visitors/test_to_sql.rb index 9b86a89300..f832bdf925 100644 --- a/test/visitors/test_to_sql.rb +++ b/test/visitors/test_to_sql.rb @@ -9,6 +9,12 @@ module Arel @attr = @table[:id] end + it 'works with BindParams' do + node = Nodes::BindParam.new 'omg' + sql = @visitor.accept node + sql.must_be_like 'omg' + end + it 'can define a dispatch method' do visited = false viz = Class.new(Arel::Visitors::Visitor) { |