diff options
Diffstat (limited to 'lib/arel/visitors.rb')
-rw-r--r-- | lib/arel/visitors.rb | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/arel/visitors.rb b/lib/arel/visitors.rb index 22077d5943..879635575b 100644 --- a/lib/arel/visitors.rb +++ b/lib/arel/visitors.rb @@ -4,3 +4,23 @@ require 'arel/visitors/mysql' require 'arel/visitors/join_sql' require 'arel/visitors/order_clauses' require 'arel/visitors/dot' + +module Arel + module Visitors + VISITORS = { + 'postgresql' => Arel::Visitors::PostgreSQL, + 'mysql' => Arel::Visitors::MySQL, + 'mysql2' => Arel::Visitors::MySQL, + } + + ENGINE_VISITORS = Hash.new do |hash, engine| + pool = engine.connection_pool + adapter = pool.spec.config[:adapter] + hash[engine] = (VISITORS[adapter] || Visitors::ToSql).new(engine) + end + + def self.visitor_for engine + ENGINE_VISITORS[engine] + end + end +end |