Skip to content

Commit

Permalink
Merge pull request #241 from alexbartlow/master
Browse files Browse the repository at this point in the history
Fix long table aliases
  • Loading branch information
artemk committed Apr 20, 2012
2 parents 381348c + 62be0c6 commit 4690e04
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@
.rvmrc
Gemfile.lock
spec/database.yml
tmp
tmp*.sw?
*.sw?
tmp
15 changes: 12 additions & 3 deletions lib/acts_as_taggable_on/acts_as_taggable_on/core.rb
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,9 @@ def tagged_with(tags, options = {})
# avoid ambiguous column name
taggings_context = context ? "_#{context}" : ''

taggings_alias = "#{alias_base_name[0..4]}#{taggings_context[0..6]}_taggings_#{sha_prefix(tags.map(&:name).join('_'))}"
taggings_alias = adjust_taggings_alias(
"#{alias_base_name[0..4]}#{taggings_context[0..6]}_taggings_#{sha_prefix(tags.map(&:name).join('_'))}"
)

tagging_join = "JOIN #{ActsAsTaggableOn::Tagging.table_name} #{taggings_alias}" +
" ON #{taggings_alias}.taggable_id = #{table_name}.#{primary_key}" +
Expand All @@ -133,7 +135,7 @@ def tagged_with(tags, options = {})

tags.each do |tag|

taggings_alias = "#{alias_base_name[0..11]}_taggings_#{sha_prefix(tag.name)}"
taggings_alias = adjust_taggings_alias("#{alias_base_name[0..11]}_taggings_#{sha_prefix(tag.name)}")

tagging_join = "JOIN #{ActsAsTaggableOn::Tagging.table_name} #{taggings_alias}" +
" ON #{taggings_alias}.taggable_id = #{table_name}.#{primary_key}" +
Expand All @@ -154,7 +156,7 @@ def tagged_with(tags, options = {})
end
end

taggings_alias, tags_alias = "#{alias_base_name}_taggings_group", "#{alias_base_name}_tags_group"
taggings_alias, tags_alias = adjust_taggings_alias("#{alias_base_name}_taggings_group"), "#{alias_base_name}_tags_group"

if options.delete(:match_all)
joins << "LEFT OUTER JOIN #{ActsAsTaggableOn::Tagging.table_name} #{taggings_alias}" +
Expand All @@ -177,6 +179,13 @@ def tagged_with(tags, options = {})
def is_taggable?
true
end

def adjust_taggings_alias(taggings_alias)
if taggings_alias.size > 75
taggings_alias = 'taggings_alias_' + Digest::SHA1.hexdigest(taggings_alias)
end
taggings_alias
end
end

module InstanceMethods
Expand Down

0 comments on commit 4690e04

Please sign in to comment.