Files
le-matelot/setup/update/php/2.2.0-beta3.php
2020-01-27 08:56:08 +01:00

54 lines
1.8 KiB
PHP

<?php
$pdo = $database->getConnection();
// Test if price columns are in float
$sqlGetFloat = "SELECT COLUMN_NAME "
. "FROM INFORMATION_SCHEMA.COLUMNS "
. "WHERE TABLE_SCHEMA LIKE DATABASE() AND TABLE_NAME LIKE 'product_price' AND COLUMN_NAME LIKE 'price' AND COLUMN_TYPE LIKE 'float%'";
$stmtGetFloat = $pdo->query($sqlGetFloat);
// alter tables to convert float to decimal
if ($stmtGetFloat->rowCount() !== 0) {
$columns = [
['product_price', 'price'],
['product_price', 'promo_price'],
['order_product', 'price'],
['order', 'discount'],
['order', 'postage'],
['order', 'postage_tax'],
['order_version', 'discount'],
['order_version', 'postage'],
['order_version', 'postage_tax'],
['order_product_tax', 'amount'],
['order_product_tax', 'promo_amount'],
['cart', 'discount'],
['cart_item', 'price'],
['cart_item', 'promo_price'],
['order_coupon', 'amount']
];
$queries = [
"ALTER TABLE `:table:` ADD COLUMN `:column:_temp` DECIMAL( 16, 6 ) NOT NULL DEFAULT '0.00000000' AFTER `:column:`",
"UPDATE `:table:` SET `:column:_temp` = CAST(`:column:` as CHAR)",
"ALTER TABLE `:table:` DROP COLUMN `:column:`",
"ALTER TABLE `:table:` CHANGE COLUMN `:column:_temp` `:column:` DECIMAL( 16, 6 ) NOT NULL DEFAULT '0.00000000'",
];
foreach ($columns as $column) {
$args = [
':table:' => $column[0],
':column:' => $column[1]
];
foreach ($queries as $query) {
$stmtConvert = $pdo->prepare(strtr($query, $args));
$stmtConvert->execute();
}
}
$stmtConvert = $pdo->prepare("ALTER TABLE `order_product` CHANGE `promo_price` `promo_price` DECIMAL( 16, 6 ) NOT NULL DEFAULT '0.00000000'");
$stmtConvert->execute();
}