41 lines
1.6 KiB
PHP
41 lines
1.6 KiB
PHP
|
<?php
|
||
|
use Index\Db\DbConnection;
|
||
|
use Index\Db\Migration\DbMigration;
|
||
|
|
||
|
final class CreateUserBirthdatesTable_20250208_013647 implements DbMigration {
|
||
|
public function migrate(DbConnection $conn): void {
|
||
|
$conn->execute(<<<SQL
|
||
|
CREATE TABLE msz_users_birthdates (
|
||
|
user_id INT(10) UNSIGNED NOT NULL,
|
||
|
birth_year SMALLINT(6) NULL DEFAULT NULL,
|
||
|
birth_month TINYINT(3) UNSIGNED NOT NULL,
|
||
|
birth_day TINYINT(3) UNSIGNED NOT NULL,
|
||
|
PRIMARY KEY (user_id),
|
||
|
INDEX users_birthdates_index (birth_month, birth_day),
|
||
|
CONSTRAINT users_birthdates_users_foreign
|
||
|
FOREIGN KEY (user_id)
|
||
|
REFERENCES msz_users (user_id)
|
||
|
ON UPDATE CASCADE
|
||
|
ON DELETE CASCADE,
|
||
|
CONSTRAINT users_birthdates_ensure_month
|
||
|
CHECK (birth_month BETWEEN 1 AND 12),
|
||
|
CONSTRAINT users_birthdates_ensure_day
|
||
|
CHECK (birth_day BETWEEN 1 AND 31)
|
||
|
) ENGINE=InnoDB COLLATE='utf8mb4_bin';
|
||
|
SQL);
|
||
|
|
||
|
$conn->execute(<<<SQL
|
||
|
INSERT INTO msz_users_birthdates
|
||
|
SELECT user_id, IF(YEAR(user_birthdate) <= 1004, NULL, YEAR(user_birthdate)), MONTH(user_birthdate), DAY(user_birthdate)
|
||
|
FROM msz_users
|
||
|
WHERE user_birthdate IS NOT NULL
|
||
|
SQL);
|
||
|
|
||
|
$conn->execute(<<<SQL
|
||
|
ALTER TABLE msz_users
|
||
|
DROP COLUMN user_birthdate,
|
||
|
DROP INDEX users_birthdate_index;
|
||
|
SQL);
|
||
|
}
|
||
|
}
|