misuzu/database/2025_04_23_224653_make_oauth_stuff_bigint.php

169 lines
6 KiB
PHP

<?php
use Index\Db\DbConnection;
use Index\Db\Migration\DbMigration;
final class MakeOauthStuffBigint_20250423_224653 implements DbMigration {
public function migrate(DbConnection $conn): void {
$conn->execute(<<<SQL
ALTER TABLE msz_apps_scopes
DROP FOREIGN KEY apps_scopes_app_foreign;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_apps_scopes
CHANGE COLUMN app_id app_id BIGINT UNSIGNED NOT NULL FIRST;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_apps_uris
DROP FOREIGN KEY apps_uris_app_foreign;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_apps_uris
CHANGE COLUMN app_id app_id BIGINT UNSIGNED NOT NULL AFTER uri_id;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_access
DROP FOREIGN KEY oauth2_access_app_foreign;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_access
CHANGE COLUMN app_id app_id BIGINT UNSIGNED NULL DEFAULT NULL AFTER acc_id;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_authorise
DROP FOREIGN KEY oauth2_authorise_app_foreign;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_authorise
DROP FOREIGN KEY oauth2_authorise_uri_foreign;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_authorise
CHANGE COLUMN app_id app_id BIGINT UNSIGNED NOT NULL AFTER auth_id,
CHANGE COLUMN uri_id uri_id BIGINT UNSIGNED NOT NULL AFTER user_id;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_device
DROP FOREIGN KEY oauth2_device_app_foreign;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_device
CHANGE COLUMN app_id app_id BIGINT UNSIGNED NOT NULL AFTER dev_id;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_refresh
DROP FOREIGN KEY oauth2_refresh_app_foreign;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_refresh
DROP FOREIGN KEY oauth2_refresh_access_foreign;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_refresh
CHANGE COLUMN app_id app_id BIGINT UNSIGNED NULL DEFAULT NULL AFTER ref_id,
CHANGE COLUMN acc_id acc_id BIGINT UNSIGNED NULL DEFAULT NULL AFTER user_id;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_apps
CHANGE COLUMN app_id app_id BIGINT UNSIGNED NOT NULL FIRST,
DROP COLUMN app_client_id,
DROP INDEX apps_client_id_unique;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_apps_uris
CHANGE COLUMN uri_id uri_id BIGINT UNSIGNED NOT NULL FIRST;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_access
CHANGE COLUMN acc_id acc_id BIGINT UNSIGNED NOT NULL FIRST;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_authorise
CHANGE COLUMN auth_id auth_id BIGINT UNSIGNED NOT NULL FIRST;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_device
CHANGE COLUMN dev_id dev_id BIGINT UNSIGNED NOT NULL FIRST;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_refresh
CHANGE COLUMN ref_id ref_id BIGINT UNSIGNED NOT NULL FIRST;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_apps_scopes
ADD CONSTRAINT apps_scopes_app_foreign
FOREIGN KEY (app_id)
REFERENCES msz_apps (app_id)
ON UPDATE CASCADE
ON DELETE CASCADE;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_apps_uris
ADD CONSTRAINT apps_uris_app_foreign
FOREIGN KEY (app_id)
REFERENCES msz_apps (app_id)
ON UPDATE CASCADE
ON DELETE CASCADE;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_access
ADD CONSTRAINT oauth2_access_app_foreign
FOREIGN KEY (app_id)
REFERENCES msz_apps (app_id)
ON UPDATE CASCADE
ON DELETE CASCADE;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_authorise
ADD CONSTRAINT oauth2_authorise_app_foreign
FOREIGN KEY (app_id)
REFERENCES msz_apps (app_id)
ON UPDATE CASCADE
ON DELETE CASCADE;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_authorise
ADD CONSTRAINT oauth2_authorise_uri_foreign
FOREIGN KEY (uri_id)
REFERENCES msz_apps_uris (uri_id)
ON UPDATE CASCADE
ON DELETE CASCADE;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_device
ADD CONSTRAINT oauth2_device_app_foreign
FOREIGN KEY (app_id)
REFERENCES msz_apps (app_id)
ON UPDATE CASCADE
ON DELETE CASCADE;
SQL);
$conn->execute(<<<SQL
ALTER TABLE msz_oauth2_refresh
ADD CONSTRAINT oauth2_refresh_app_foreign
FOREIGN KEY (app_id)
REFERENCES msz_apps (app_id)
ON UPDATE CASCADE
ON DELETE CASCADE;
SQL);
$snowflake = new \Index\Snowflake\RandomSnowflake;
$stmt = $conn->prepare('UPDATE msz_apps SET app_id = ? WHERE app_id = ?');
$result = $conn->query('SELECT app_id, UNIX_TIMESTAMP(app_created) FROM msz_apps');
while($result->next()) {
$stmt->addParameter(1, (string)$snowflake->next(at: $result->getInteger(1) * 1000));
$stmt->addParameter(2, $result->getString(0));
$stmt->execute();
}
}
}