From bff5e799c056a1914653ae53166949b4adff3d4b Mon Sep 17 00:00:00 2001 From: Ryuta Kamizono Date: Fri, 1 Mar 2019 21:27:47 +0900 Subject: [PATCH] Relax table name detection in `from` to allow any extension like INDEX hint #35360 allows table name qualified if `from` has original table name. But that is still too strict. We have a valid use case that `from` with INDEX hint (e.g. `from("comments USE INDEX (PRIMARY)")`). So I've relaxed the table name detection in `from` to allow any extension like INDEX hint. Fixes #35359. --- .../active_record/relation/query_methods.rb | 7 ++-- activerecord/test/cases/relations_test.rb | 32 +++++++++++++------ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index f88493df8a61a..24a50db619bf8 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -1091,14 +1091,17 @@ def arel_column(field) field = klass.attribute_alias(field) if klass.attribute_alias?(field) from = from_clause.name || from_clause.value - if klass.columns_hash.key?(field) && - (!from || from == table.name || from == connection.quote_table_name(table.name)) + if klass.columns_hash.key?(field) && (!from || table_name_matches?(from)) arel_attribute(field) else yield end end + def table_name_matches?(from) + /(?:\A|(?