From f031a3b9aa6a8093802e0188abce58e0b997078e Mon Sep 17 00:00:00 2001 From: Sean Griffin Date: Fri, 21 Jul 2017 08:02:58 -0400 Subject: Rename `Collectors::Bind` The "bind collector" does not actually collect bind params at all, it substitutes them out of the final AST, replacing them with a quoted value. --- arel.gemspec | 2 +- lib/arel/collectors/bind.rb | 37 --------------------------------- lib/arel/collectors/substitute_binds.rb | 37 +++++++++++++++++++++++++++++++++ lib/arel/visitors/bind_substitute.rb | 10 --------- test/collectors/test_bind_collector.rb | 4 ++-- test/collectors/test_sql_string.rb | 1 - 6 files changed, 40 insertions(+), 51 deletions(-) delete mode 100644 lib/arel/collectors/bind.rb create mode 100644 lib/arel/collectors/substitute_binds.rb delete mode 100644 lib/arel/visitors/bind_substitute.rb diff --git a/arel.gemspec b/arel.gemspec index f0d2f66887..a1bc944f70 100644 --- a/arel.gemspec +++ b/arel.gemspec @@ -17,7 +17,7 @@ Gem::Specification.new do |s| s.rdoc_options = ["--main", "README.md"] s.extra_rdoc_files = ["History.txt", "MIT-LICENSE.txt", "README.md"] - s.files = ["History.txt","MIT-LICENSE.txt","README.md","lib/arel.rb","lib/arel/alias_predication.rb","lib/arel/attributes.rb","lib/arel/attributes/attribute.rb","lib/arel/collectors/bind.rb","lib/arel/collectors/plain_string.rb","lib/arel/collectors/sql_string.rb","lib/arel/compatibility/wheres.rb","lib/arel/crud.rb","lib/arel/delete_manager.rb","lib/arel/errors.rb","lib/arel/expressions.rb","lib/arel/factory_methods.rb","lib/arel/insert_manager.rb","lib/arel/math.rb","lib/arel/nodes.rb","lib/arel/nodes/and.rb","lib/arel/nodes/ascending.rb","lib/arel/nodes/binary.rb","lib/arel/nodes/bind_param.rb","lib/arel/nodes/case.rb","lib/arel/nodes/casted.rb","lib/arel/nodes/count.rb","lib/arel/nodes/delete_statement.rb","lib/arel/nodes/descending.rb","lib/arel/nodes/equality.rb","lib/arel/nodes/extract.rb","lib/arel/nodes/false.rb","lib/arel/nodes/full_outer_join.rb","lib/arel/nodes/function.rb","lib/arel/nodes/grouping.rb","lib/arel/nodes/in.rb","lib/arel/nodes/infix_operation.rb","lib/arel/nodes/inner_join.rb","lib/arel/nodes/insert_statement.rb","lib/arel/nodes/join_source.rb","lib/arel/nodes/matches.rb","lib/arel/nodes/named_function.rb","lib/arel/nodes/node.rb","lib/arel/nodes/outer_join.rb","lib/arel/nodes/over.rb","lib/arel/nodes/regexp.rb","lib/arel/nodes/right_outer_join.rb","lib/arel/nodes/select_core.rb","lib/arel/nodes/select_statement.rb","lib/arel/nodes/sql_literal.rb","lib/arel/nodes/string_join.rb","lib/arel/nodes/table_alias.rb","lib/arel/nodes/terminal.rb","lib/arel/nodes/true.rb","lib/arel/nodes/unary.rb","lib/arel/nodes/unary_operation.rb","lib/arel/nodes/unqualified_column.rb","lib/arel/nodes/update_statement.rb","lib/arel/nodes/values.rb","lib/arel/nodes/window.rb","lib/arel/nodes/with.rb","lib/arel/order_predications.rb","lib/arel/predications.rb","lib/arel/select_manager.rb","lib/arel/table.rb","lib/arel/tree_manager.rb","lib/arel/update_manager.rb","lib/arel/visitors.rb","lib/arel/visitors/bind_substitute.rb","lib/arel/visitors/bind_visitor.rb","lib/arel/visitors/depth_first.rb","lib/arel/visitors/dot.rb","lib/arel/visitors/ibm_db.rb","lib/arel/visitors/informix.rb","lib/arel/visitors/mssql.rb","lib/arel/visitors/mysql.rb","lib/arel/visitors/oracle.rb","lib/arel/visitors/oracle12.rb","lib/arel/visitors/postgresql.rb","lib/arel/visitors/reduce.rb","lib/arel/visitors/sqlite.rb","lib/arel/visitors/to_sql.rb","lib/arel/visitors/visitor.rb","lib/arel/visitors/where_sql.rb","lib/arel/window_predications.rb"] + s.files = ["History.txt","MIT-LICENSE.txt","README.md","lib/arel.rb","lib/arel/alias_predication.rb","lib/arel/attributes.rb","lib/arel/attributes/attribute.rb","lib/arel/collectors/substitute_binds.rb","lib/arel/collectors/plain_string.rb","lib/arel/collectors/sql_string.rb","lib/arel/compatibility/wheres.rb","lib/arel/crud.rb","lib/arel/delete_manager.rb","lib/arel/errors.rb","lib/arel/expressions.rb","lib/arel/factory_methods.rb","lib/arel/insert_manager.rb","lib/arel/math.rb","lib/arel/nodes.rb","lib/arel/nodes/and.rb","lib/arel/nodes/ascending.rb","lib/arel/nodes/binary.rb","lib/arel/nodes/bind_param.rb","lib/arel/nodes/case.rb","lib/arel/nodes/casted.rb","lib/arel/nodes/count.rb","lib/arel/nodes/delete_statement.rb","lib/arel/nodes/descending.rb","lib/arel/nodes/equality.rb","lib/arel/nodes/extract.rb","lib/arel/nodes/false.rb","lib/arel/nodes/full_outer_join.rb","lib/arel/nodes/function.rb","lib/arel/nodes/grouping.rb","lib/arel/nodes/in.rb","lib/arel/nodes/infix_operation.rb","lib/arel/nodes/inner_join.rb","lib/arel/nodes/insert_statement.rb","lib/arel/nodes/join_source.rb","lib/arel/nodes/matches.rb","lib/arel/nodes/named_function.rb","lib/arel/nodes/node.rb","lib/arel/nodes/outer_join.rb","lib/arel/nodes/over.rb","lib/arel/nodes/regexp.rb","lib/arel/nodes/right_outer_join.rb","lib/arel/nodes/select_core.rb","lib/arel/nodes/select_statement.rb","lib/arel/nodes/sql_literal.rb","lib/arel/nodes/string_join.rb","lib/arel/nodes/table_alias.rb","lib/arel/nodes/terminal.rb","lib/arel/nodes/true.rb","lib/arel/nodes/unary.rb","lib/arel/nodes/unary_operation.rb","lib/arel/nodes/unqualified_column.rb","lib/arel/nodes/update_statement.rb","lib/arel/nodes/values.rb","lib/arel/nodes/window.rb","lib/arel/nodes/with.rb","lib/arel/order_predications.rb","lib/arel/predications.rb","lib/arel/select_manager.rb","lib/arel/table.rb","lib/arel/tree_manager.rb","lib/arel/update_manager.rb","lib/arel/visitors.rb","lib/arel/visitors/bind_visitor.rb","lib/arel/visitors/depth_first.rb","lib/arel/visitors/dot.rb","lib/arel/visitors/ibm_db.rb","lib/arel/visitors/informix.rb","lib/arel/visitors/mssql.rb","lib/arel/visitors/mysql.rb","lib/arel/visitors/oracle.rb","lib/arel/visitors/oracle12.rb","lib/arel/visitors/postgresql.rb","lib/arel/visitors/reduce.rb","lib/arel/visitors/sqlite.rb","lib/arel/visitors/to_sql.rb","lib/arel/visitors/visitor.rb","lib/arel/visitors/where_sql.rb","lib/arel/window_predications.rb"] s.require_paths = ["lib"] s.add_development_dependency('minitest', '~> 5.4') diff --git a/lib/arel/collectors/bind.rb b/lib/arel/collectors/bind.rb deleted file mode 100644 index dfa79d1001..0000000000 --- a/lib/arel/collectors/bind.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true -module Arel - module Collectors - class Bind - def initialize - @parts = [] - end - - def << str - @parts << str - self - end - - def add_bind bind - @parts << bind - self - end - - def value; @parts; end - - def substitute_binds bvs - bvs = bvs.dup - @parts.map do |val| - if Arel::Nodes::BindParam === val - bvs.shift - else - val - end - end - end - - def compile bvs - substitute_binds(bvs).join - end - end - end -end diff --git a/lib/arel/collectors/substitute_binds.rb b/lib/arel/collectors/substitute_binds.rb new file mode 100644 index 0000000000..62589c44e8 --- /dev/null +++ b/lib/arel/collectors/substitute_binds.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true +module Arel + module Collectors + class SubstituteBinds + def initialize + @parts = [] + end + + def << str + @parts << str + self + end + + def add_bind bind + @parts << bind + self + end + + def value; @parts; end + + def substitute_binds bvs + bvs = bvs.dup + @parts.map do |val| + if Arel::Nodes::BindParam === val + bvs.shift + else + val + end + end + end + + def compile bvs + substitute_binds(bvs).join + end + end + end +end diff --git a/lib/arel/visitors/bind_substitute.rb b/lib/arel/visitors/bind_substitute.rb deleted file mode 100644 index 52c96b0d72..0000000000 --- a/lib/arel/visitors/bind_substitute.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true -module Arel - module Visitors - class BindSubstitute - def initialize delegate - @delegate = delegate - end - end - end -end diff --git a/test/collectors/test_bind_collector.rb b/test/collectors/test_bind_collector.rb index 877aa20043..fef157782b 100644 --- a/test/collectors/test_bind_collector.rb +++ b/test/collectors/test_bind_collector.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true require 'helper' -require 'arel/collectors/bind' +require 'arel/collectors/substitute_binds' module Arel module Collectors @@ -12,7 +12,7 @@ module Arel end def collect node - @visitor.accept(node, Collectors::Bind.new) + @visitor.accept(node, Collectors::SubstituteBinds.new) end def compile node diff --git a/test/collectors/test_sql_string.rb b/test/collectors/test_sql_string.rb index 92f1bf0fba..769c2e6d53 100644 --- a/test/collectors/test_sql_string.rb +++ b/test/collectors/test_sql_string.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true require 'helper' -require 'arel/collectors/bind' module Arel module Collectors -- cgit v1.2.3