#!/usr/bin/env php setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $driver = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME); switch ($driver) { case 'mysql': echo "Detected MySQL.\n"; break; case 'sqlite': echo "Detected SQLite.\n"; break; default: echo 'Error: unsupported driver: '.$driver."\n"; die(-1); } echo "Creating 'calendarinstances'\n"; $addValueType = false; try { $result = $pdo->query('SELECT * FROM calendarinstances LIMIT 1'); $result->fetch(\PDO::FETCH_ASSOC); echo "calendarinstances exists. Assuming this part of the migration has already been done.\n"; } catch (Exception $e) { echo "calendarinstances does not yet exist. Creating table and migrating data.\n"; switch ($driver) { case 'mysql': $pdo->exec(<<exec(' INSERT INTO calendarinstances ( calendarid, principaluri, access, displayname, uri, description, calendarorder, calendarcolor, transparent ) SELECT id, principaluri, 1, displayname, uri, description, calendarorder, calendarcolor, transparent FROM calendars '); break; case 'sqlite': $pdo->exec(<<exec(' INSERT INTO calendarinstances ( calendarid, principaluri, access, displayname, uri, description, calendarorder, calendarcolor, transparent ) SELECT id, principaluri, 1, displayname, uri, description, calendarorder, calendarcolor, transparent FROM calendars '); break; } } try { $result = $pdo->query('SELECT * FROM calendars LIMIT 1'); $row = $result->fetch(\PDO::FETCH_ASSOC); if (!$row) { echo "Source table is empty.\n"; $migrateCalendars = true; } $columnCount = count($row); if (3 === $columnCount) { echo "The calendars table has 3 columns already. Assuming this part of the migration was already done.\n"; $migrateCalendars = false; } else { echo 'The calendars table has '.$columnCount." columns.\n"; $migrateCalendars = true; } } catch (Exception $e) { echo "calendars table does not exist. This is a major problem. Exiting.\n"; exit(-1); } if ($migrateCalendars) { $calendarBackup = 'calendars_3_1_'.$backupPostfix; echo "Backing up 'calendars' to '", $calendarBackup, "'\n"; switch ($driver) { case 'mysql': $pdo->exec('RENAME TABLE calendars TO '.$calendarBackup); break; case 'sqlite': $pdo->exec('ALTER TABLE calendars RENAME TO '.$calendarBackup); break; } echo "Creating new calendars table.\n"; switch ($driver) { case 'mysql': $pdo->exec(<<exec(<<exec(<<