50 lines
1.8 KiB
PHP
50 lines
1.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use Phinx\Migration\AbstractMigration;
|
|
|
|
/**
|
|
* Converte orderbook.quantityclass da varchar(20) a INT.
|
|
*
|
|
* quantityclass rappresenta il numero di ticket acquistati: viene usato in
|
|
* confronti e aritmetica (offset, LIMIT, conteggi). Tenerlo come stringa
|
|
* causa confronti errati ("10" < "9") e comportamenti imprevisti.
|
|
*
|
|
* PRIMA di cambiare il tipo, bonifica i valori esistenti: elimina spazi e
|
|
* azzera i valori non numerici / vuoti, altrimenti la conversione li
|
|
* troncherebbe in modo silenzioso.
|
|
*/
|
|
final class ConvertQuantityclassToInt extends AbstractMigration
|
|
{
|
|
public function up(): void
|
|
{
|
|
// 1) Bonifica: rimuovi spazi ai bordi
|
|
$this->execute("UPDATE orderbook SET quantityclass = TRIM(quantityclass) WHERE quantityclass IS NOT NULL");
|
|
|
|
// 2) Bonifica: i valori non interamente numerici o vuoti diventano 0
|
|
// (REGEXP '^[0-9]+$' = solo cifre). Rivedi manualmente eventuali 0
|
|
// risultanti dopo la migration se non te li aspetti.
|
|
$this->execute("UPDATE orderbook SET quantityclass = '0' WHERE quantityclass IS NULL OR quantityclass = '' OR quantityclass NOT REGEXP '^[0-9]+$'");
|
|
|
|
// 3) Cambia il tipo di colonna a INT
|
|
$table = $this->table('orderbook');
|
|
$table->changeColumn('quantityclass', 'integer', [
|
|
'null' => true,
|
|
'default' => null,
|
|
'signed' => true,
|
|
])->update();
|
|
}
|
|
|
|
public function down(): void
|
|
{
|
|
// Ripristina varchar(20). I valori numerici restano validi come stringa.
|
|
$table = $this->table('orderbook');
|
|
$table->changeColumn('quantityclass', 'string', [
|
|
'limit' => 20,
|
|
'null' => true,
|
|
'default' => null,
|
|
])->update();
|
|
}
|
|
}
|