From 2da8f2154b2f4c6beac5e50225742beb3caea996 Mon Sep 17 00:00:00 2001 From: Sean Griffin Date: Sun, 25 Jan 2015 16:53:46 -0700 Subject: Move the construction of `WhereClause` objects out of `Relation` Yes, I know, I called it a factory so I'm basically the worst person ever who loves Java and worships the Gang of Four. --- .../lib/active_record/relation/query_methods.rb | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) (limited to 'activerecord/lib/active_record/relation/query_methods.rb') diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index 9a636bc527..863d7bb1aa 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -2,6 +2,7 @@ require 'active_support/core_ext/array/wrap' require 'active_support/core_ext/string/filters' require 'active_model/forbidden_attributes_protection' require "active_record/relation/where_clause" +require "active_record/relation/where_clause_factory" module ActiveRecord module QueryMethods @@ -969,20 +970,9 @@ module ActiveRecord end def build_where(opts, other = []) - case opts - when String, Array - [@klass.send(:sanitize_sql, other.empty? ? opts : ([opts] + other))] - when Hash - opts = predicate_builder.resolve_column_aliases(opts) - opts = @klass.send(:expand_hash_conditions_for_aggregates, opts) - - attributes, bind_values = predicate_builder.create_binds(opts) - self.bind_values += bind_values - - predicate_builder.build_from_hash(attributes) - else - [opts] - end + where_clause = where_clause_factory.build(opts, other) + self.bind_values += where_clause.binds + where_clause.parts end def association_for_table(table_name) @@ -1151,5 +1141,9 @@ module ActiveRecord def new_where_clause Relation::WhereClause.empty end + + def where_clause_factory + @where_clause_factory ||= Relation::WhereClauseFactory.new(klass, predicate_builder) + end end end -- cgit v1.2.3