szurubooru/src/Upgrades/Upgrade10.php

60 lines
1.6 KiB
PHP
Raw Normal View History

2014-09-27 21:33:31 +02:00
<?php
namespace Szurubooru\Upgrades;
class Upgrade10 implements IUpgrade
{
public function run(\Szurubooru\DatabaseConnection $databaseConnection)
{
$pdo = $databaseConnection->getPDO();
$pdo->exec('ALTER TABLE posts ADD COLUMN favCount INTEGER NOT NULL DEFAULT 0');
$pdo->exec('ALTER TABLE posts ADD COLUMN lastFavTime TIMESTAMP');
2014-09-27 21:33:31 +02:00
$pdo->exec('CREATE TABLE favorites
(
id INTEGER PRIMARY KEY NOT NULL,
userId INTEGER NOT NULL,
postId INTEGER NOT NULL,
time TIMESTAMP NOT NULL,
2014-09-27 21:33:31 +02:00
UNIQUE (userId, postId)
)');
$pdo->exec('
CREATE TRIGGER favoritesDelete BEFORE DELETE ON favorites
FOR EACH ROW
BEGIN
UPDATE posts SET favCount = favCount - 1 WHERE posts.id = OLD.postId;
UPDATE posts SET lastFavTime = (
SELECT MAX(time) FROM favorites
WHERE favorites.postId = posts.id)
WHERE posts.id = OLD.postId;
2014-09-27 21:33:31 +02:00
END');
$pdo->exec('
CREATE TRIGGER favoritesInsert AFTER INSERT ON favorites
FOR EACH ROW
BEGIN
UPDATE posts SET favCount = favCount + 1 WHERE posts.id = NEW.postId;
UPDATE posts SET lastFavTime = (
SELECT MAX(time) FROM favorites
WHERE favorites.postId = posts.id)
WHERE posts.id = NEW.postId;
2014-09-27 21:33:31 +02:00
END');
$pdo->exec('
CREATE TRIGGER favoritesUpdate AFTER UPDATE ON favorites
FOR EACH ROW
BEGIN
UPDATE posts SET favCount = favCount + 1 WHERE posts.id = NEW.postId;
UPDATE posts SET favCount = favCount - 1 WHERE posts.id = OLD.postId;
UPDATE posts SET lastFavTime = (
SELECT MAX(time) FROM favorites
WHERE favorites.postId = posts.id)
WHERE posts.id IN (OLD.postId, NEW.postId);
2014-09-27 21:33:31 +02:00
END');
}
}