40 lines
1.6 KiB
PHP
40 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);
|
|
}
|
|
}
|