35 lines
818 B
Ruby
35 lines
818 B
Ruby
class CounterCacheOnPostReshares < ActiveRecord::Migration
|
|
class Post < ActiveRecord::Base; end
|
|
|
|
def self.up
|
|
add_column :posts, :reshares_count, :integer, :default => 0
|
|
|
|
if AppConfig.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
|
|
remove_column :posts, :reshares_count
|
|
end
|
|
end
|