migrations/Version20230411050246.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. /**
  7.  * Auto-generated Migration: Please modify to your needs!
  8.  */
  9. final class Version20230411050246 extends AbstractMigration
  10. {
  11.     public function getDescription(): string
  12.     {
  13.         return '';
  14.     }
  15.     public function up(Schema $schema): void
  16.     {
  17.         //CUSTOMER
  18.         $this->addSql("CREATE PROCEDURE ProcessCustomers()
  19.                BEGIN
  20.                    DECLARE done INT DEFAULT 0;
  21.                    DECLARE customerId INT;
  22.                    DECLARE line1 VARCHAR(255);
  23.                    DECLARE city VARCHAR(255);
  24.                    DECLARE zip VARCHAR(255);
  25.                    DECLARE country VARCHAR(255);
  26.                    DECLARE details VARCHAR(255);
  27.                    DECLARE newUuid CHAR(36);
  28.                    DECLARE newAddressId INT;
  29.                    DECLARE cur CURSOR FOR
  30.                        SELECT
  31.                            customer.id,
  32.                            CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(address_details, '$.address')) = 'null' THEN NULL ELSE JSON_UNQUOTE(JSON_EXTRACT(address_details, '$.address')) END as line1,
  33.                            CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(address_details, '$.city')) = 'null' THEN NULL ELSE JSON_UNQUOTE(JSON_EXTRACT(address_details, '$.city')) END as city,
  34.                            CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(address_details, '$.zip')) = 'null' THEN NULL ELSE JSON_UNQUOTE(JSON_EXTRACT(address_details, '$.zip')) END as zip,
  35.                            COALESCE(JSON_UNQUOTE(JSON_EXTRACT(address_details, '$.country')), 'Unknown') as country,
  36.                            CASE WHEN JSON_UNQUOTE(JSON_EXTRACT(address_details, '$.district')) = 'null' THEN NULL ELSE JSON_UNQUOTE(JSON_EXTRACT(address_details, '$.district')) END as details,
  37.                            UUID() AS new_uuid
  38.                        FROM customer
  39.                        WHERE JSON_LENGTH(address_details) > 0;
  40.                    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
  41.                    OPEN cur;
  42.                    read_loop: LOOP
  43.                        FETCH cur INTO customerId, line1, city, zip, country, details, newUuid;
  44.                        IF done THEN
  45.                            LEAVE read_loop;
  46.                        END IF;
  47.                        INSERT INTO address (line1, city, zip, country, details, uuid)
  48.                        VALUES (
  49.                            NULLIF(line1, ''),
  50.                            NULLIF(city, ''),
  51.                            NULLIF(zip, ''),
  52.                            NULLIF(country, ''),
  53.                            NULLIF(details, ''),
  54.                            newUuid
  55.                        );
  56.                        SET newAddressId = LAST_INSERT_ID();
  57.                        UPDATE customer
  58.                        SET address_id = newAddressId
  59.                        WHERE id = customerId;
  60.                    END LOOP;
  61.                    CLOSE cur;
  62.                END;");
  63.         $this->addSql("CALL ProcessCustomers();");
  64.         $this->addSql("DROP PROCEDURE ProcessCustomers");
  65.     }
  66.     public function down(Schema $schema): void
  67.     {
  68.         // this down() migration is auto-generated, please modify it to your needs
  69.     }
  70. }