Skip to content

Commit be59051

Browse files
committed
Rails2.3 - Implement a custom ActiveRecord::Associations::ClassMethods::JoinDependency::JoinAssociation#aliased_table_name_for method that uses a Regexp.escape so that table/column quoting does not get ignored.
1 parent f932082 commit be59051

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

CHANGELOG

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11

22
MASTER
33

4+
* Rails2.3 - Implement a custom ActiveRecord::Associations::ClassMethods::JoinDependency::JoinAssociation#aliased_table_name_for
5+
method that uses a Regexp.escape so that table/column quoting does not get ignored. [Ken Collins]
6+
47
* Rails2.3 - Implement #outside_transaction? and a new transaction test case to test some SQL Server
58
basic support while implementing this method. Future home of some savepoint tests too. [Ken Collins]
69

lib/core_ext/active_record.rb

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,49 @@ def add_order_with_sqlserver_unique_checking!(sql, order, scope = :auto)
8181
end
8282

8383
ActiveRecord::Base.send :include, ActiveRecord::ConnectionAdapters::SQLServerActiveRecordExtensions
84+
85+
86+
87+
88+
require 'active_record/associations'
89+
90+
module ActiveRecord
91+
module ConnectionAdapters
92+
module SQLServerJoinAssociationChanges
93+
94+
def self.included(klass)
95+
klass.class_eval do
96+
include InstanceMethods
97+
alias_method_chain :aliased_table_name_for, :sqlserver_support
98+
end
99+
end
100+
101+
module InstanceMethods
102+
103+
protected
104+
105+
# An exact copy, except this method has a Regexp escape on the quoted table name.
106+
def aliased_table_name_for_with_sqlserver_support(name,suffix=nil)
107+
if !parent.table_joins.blank? && parent.table_joins.to_s.downcase =~ %r{join(\s+\w+)?\s+#{Regexp.escape(active_record.connection.quote_table_name(name.downcase))}\son}i
108+
@join_dependency.table_aliases[name] += 1
109+
end
110+
unless @join_dependency.table_aliases[name].zero?
111+
# if the table name has been used, then use an alias
112+
name = active_record.connection.table_alias_for "#{pluralize(reflection.name)}_#{parent_table_name}#{suffix}"
113+
table_index = @join_dependency.table_aliases[name]
114+
@join_dependency.table_aliases[name] += 1
115+
name = name[0..active_record.connection.table_alias_length-3] + "_#{table_index+1}" if table_index > 0
116+
else
117+
@join_dependency.table_aliases[name] += 1
118+
end
119+
name
120+
end
121+
122+
end
123+
124+
end
125+
end
126+
end
127+
128+
ActiveRecord::Associations::ClassMethods::JoinDependency::JoinAssociation.send :include, ActiveRecord::ConnectionAdapters::SQLServerJoinAssociationChanges
129+

0 commit comments

Comments
 (0)