diff --git a/db/migrate/20111111025358_counter_cache_on_post_reshares.rb b/db/migrate/20111111025358_counter_cache_on_post_reshares.rb index cc2384d49..ffeed4566 100644 --- a/db/migrate/20111111025358_counter_cache_on_post_reshares.rb +++ b/db/migrate/20111111025358_counter_cache_on_post_reshares.rb @@ -4,16 +4,29 @@ class CounterCacheOnPostReshares < ActiveRecord::Migration def self.up add_column :posts, :reshares_count, :integer, :default => 0 - execute %{ - UPDATE posts - SET reshares_count = ( - SELECT COUNT(*) - FROM posts p2 - WHERE - p2.type = 'Reshare' - AND p2.root_guid = posts.guid - ) - } + if postgres? + execute %{ + UPDATE posts + SET reshares_count = ( + SELECT COUNT(*) + FROM posts p2 + WHERE + p2.type = 'Reshare' + AND p2.root_guid = posts.guid + ) + } + else # mysql + execute "CREATE TEMPORARY TABLE posts_reshared SELECT * FROM posts WHERE type = 'Reshare'" + execute %{ + UPDATE posts p1 + SET reshares_count = ( + SELECT COUNT(*) + FROM posts_reshared p2 + WHERE p2.root_guid = p1.guid + ) + } + end + end def self.down