query('SHOW TABLES'); $tables = $stmt->fetchAll(\PDO::FETCH_COLUMN); // Check if tables of v0.9 are presents $diff = array_diff([Utils::table('poll'), Utils::table('slot'), Utils::table('vote'), Utils::table('comment')], $tables); return count($diff) === 0; } function execute(\PDO $pdo) { $pdo->beginTransaction(); $this->rpadVotes($pdo); $pdo->commit(); return true; } private function rpadVotes($pdo) { $pdo->exec('UPDATE ' . Utils::table('vote') . ' fv INNER JOIN ( SELECT v.id, RPAD(v.choices, inn.slots_count, \'0\') new_choices FROM ' . Utils::table('vote') . ' v INNER JOIN (SELECT s.poll_id, SUM(IFNULL(LENGTH(s.moments) - LENGTH(REPLACE(s.moments, \',\', \'\')) + 1, 1)) slots_count FROM ' . Utils::table('slot') . ' s GROUP BY s.poll_id ORDER BY s.poll_id) inn ON inn.poll_id = v.poll_id WHERE LENGTH(v.choices) != inn.slots_count ) computed ON fv.id = computed.id SET fv.choices = computed.new_choices'); } }