🗄️ Migracion SQL 9.1.0 — Cambios en Base de Datos
Actualizado: 2026-04
#Resumen de cambios en la BD
La migracion SQL de PS 9.1.0 introduce 4 nuevas tablas, modifica columnas existentes, registra 20 nuevos hooks, elimina 2, e inserta datos iniciales para los nuevos sistemas. A continuacion se documenta cada cambio.
Fichero fuente
El SQL completo esta en autoupgrade/upgrade/sql/9.1.0.sql del repositorio oficial.
#Nuevos feature flags
Feature flags insertados
sql
-- Nuevos feature flags (todos en estado beta, desactivados)
INSERT INTO `PREFIX_feature_flag` (name, state, label_wording, label_domain, description_wording, description_domain, stability)
VALUES
('improved_shipment', 0, 'Improved shipment', 'Admin.Shipping', 'Enable the improved shipment system', 'Admin.Shipping', 'beta'),
('discount', 0, 'Discount', 'Admin.Catalog', 'Enable the new discount system', 'Admin.Catalog', 'beta'),
('tag', 0, 'Tag', 'Admin.Catalog', 'Enable the new tag system', 'Admin.Catalog', 'beta');
-- Feature flag obsoleto eliminado
DELETE FROM `PREFIX_feature_flag` WHERE name = 'cart_rule';
#Tablas de Multi-Shipment
Dos nuevas tablas soportan el sistema de envios multiples:
CREATE TABLE ps_shipment
sql
CREATE TABLE IF NOT EXISTS `PREFIX_shipment` (
`id_shipment` INT(10) NOT NULL AUTO_INCREMENT,
`id_order` INT(10) NOT NULL,
`id_carrier` INT(10) NOT NULL,
`id_delivery_address` INT(10) DEFAULT NULL,
`shipping_cost_tax_excl` NUMERIC(20,6) DEFAULT '0.000000',
`shipping_cost_tax_incl` NUMERIC(20,6) DEFAULT '0.000000',
`packed_at` DATETIME DEFAULT NULL,
`shipped_at` DATETIME DEFAULT NULL,
`delivered_at` DATETIME DEFAULT NULL,
`cancelled_at` DATETIME DEFAULT NULL,
`tracking_number` VARCHAR(255) DEFAULT NULL,
`date_add` DATETIME NOT NULL,
`date_upd` DATETIME NOT NULL,
PRIMARY KEY (`id_shipment`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE ps_shipment_product
sql
CREATE TABLE IF NOT EXISTS `PREFIX_shipment_product` (
`id_shipment_product` INT NOT NULL AUTO_INCREMENT,
`id_shipment` INT(10) NOT NULL,
`id_order_detail` INT(10) NOT NULL,
`quantity` INT(10) DEFAULT NULL,
PRIMARY KEY (`id_shipment_product`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
#Tablas del sistema de descuentos
CREATE TABLE ps_cart_rule_type
sql
CREATE TABLE IF NOT EXISTS `PREFIX_cart_rule_type` (
`id_cart_rule_type` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`discount_type` VARCHAR(128) NOT NULL,
`is_core` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
`active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1,
`date_add` DATETIME NOT NULL,
`date_upd` DATETIME NOT NULL,
PRIMARY KEY (`id_cart_rule_type`),
UNIQUE KEY `discount_type` (`discount_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE ps_cart_rule_type_lang
sql
CREATE TABLE IF NOT EXISTS `PREFIX_cart_rule_type_lang` (
`id_cart_rule_type` INT(10) UNSIGNED NOT NULL,
`id_lang` INT(10) UNSIGNED NOT NULL,
`name` VARCHAR(255) NOT NULL,
`description` TEXT DEFAULT NULL,
PRIMARY KEY (`id_cart_rule_type`, `id_lang`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE ps_cart_rule_compatible_types
sql
CREATE TABLE IF NOT EXISTS `PREFIX_cart_rule_compatible_types` (
`id_cart_rule` INT(10) UNSIGNED NOT NULL,
`id_cart_rule_type` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`id_cart_rule`, `id_cart_rule_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Datos iniciales — 5 tipos de descuento core
sql
INSERT INTO `PREFIX_cart_rule_type` (name, is_core, active) VALUES
('free_shipping', 1, 1),
('cart_level', 1, 1),
('order_level', 1, 1),
('product_level', 1, 1),
('free_gift', 1, 1);
#Hooks registrados en SQL
La migracion inserta 21 nuevos hooks en la tabla ps_hook:
INSERT de nuevos hooks
sql
INSERT IGNORE INTO `PREFIX_hook` (name, title, description) VALUES
-- Modulos
('actionModuleUpgradeAfter', 'After module upgrade', 'Triggered after successful module upgrade'),
('actionModuleEnable', 'After module enable', 'Triggered after module is enabled'),
('actionModuleDisable', 'After module disable', 'Triggered after module is disabled'),
-- Configuracion
('actionConfigurationUpdateValueBefore', 'Before configuration update', 'Before Configuration::updateValue()'),
-- Descuentos
('actionAdminDuplicateDiscountBefore', 'Before discount duplication', ''),
('actionAdminDuplicateDiscountAfter', 'After discount duplication', ''),
('actionDiscountGridDefinitionModifier', 'Discount grid definition', ''),
('actionDiscountGridQueryBuilderModifier', 'Discount grid query', ''),
('actionDiscountGridDataModifier', 'Discount grid data', ''),
('actionDiscountGridFilterFormModifier', 'Discount grid filters', ''),
('actionDiscountGridPresenterModifier', 'Discount grid presenter', ''),
-- Tags
('actionTagFormBuilderModifier', 'Tag form builder', ''),
('actionTagFormDataProviderData', 'Tag form data', ''),
('actionTagFormDataProviderDefaultData', 'Tag form default data', ''),
('actionBeforeCreateTagFormHandler', 'Before tag creation', ''),
('actionAfterCreateTagFormHandler', 'After tag creation', ''),
('actionBeforeUpdateTagFormHandler', 'Before tag update', ''),
('actionAfterUpdateTagFormHandler', 'After tag update', ''),
-- Envio
('actionOverrideShippingFreePrice', 'Override free shipping by price', ''),
('actionOverrideShippingFreeWeight', 'Override free shipping by weight', ''),
-- Combinaciones
('actionUpdateDefaultCombinationAfter', 'After default combination update', ''),
-- Hummingbird
('displayOrderDetail', 'Order detail display', ''),
('displayModalContent', 'Modal content', '');
-- Hooks ELIMINADOS
DELETE FROM `PREFIX_hook` WHERE name IN (
'actionCartRuleFormDataProviderData',
'actionCartRuleFormDataProviderDefaultData'
);
#Cambios en ps_cart_rule_product_rule
Ampliacion del ENUM de tipo
sql
-- La columna 'type' de ps_cart_rule_product_rule se amplía
-- Valores anteriores: products, categories, attributes, manufacturers, suppliers
-- Nuevos valores añadidos: combinations, features
ALTER TABLE `PREFIX_cart_rule_product_rule`
MODIFY `type` ENUM('products','categories','attributes','manufacturers','suppliers','combinations','features')
NOT NULL;
#Limpieza de datos huerfanos
La migracion tambien ejecuta limpieza de datos huerfanos para mantener la integridad referencial:
Limpieza de relaciones hook-modulo huerfanas
sql
-- Eliminar registros de hook_module que referencien hooks inexistentes
DELETE hm FROM `PREFIX_hook_module` hm
LEFT JOIN `PREFIX_hook` h ON hm.id_hook = h.id_hook
WHERE h.id_hook IS NULL;
-- Eliminar registros de hook_module_exceptions huerfanos
DELETE hme FROM `PREFIX_hook_module_exceptions` hme
LEFT JOIN `PREFIX_hook` h ON hme.id_hook = h.id_hook
WHERE h.id_hook IS NULL;
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.