mirror of
https://git.imnavajas.es/jjimenez/erp-imprimelibros.git
synced 2026-01-24 09:40:21 +00:00
48 lines
1.5 KiB
YAML
48 lines
1.5 KiB
YAML
databaseChangeLog:
|
|
- changeSet:
|
|
id: 0008-update-cart-status-constraint
|
|
author: jjo
|
|
changes:
|
|
# 1) Eliminar el índice único antiguo (user_id, status)
|
|
- sql:
|
|
sql: |
|
|
ALTER TABLE carts
|
|
DROP INDEX uq_carts_user_active;
|
|
|
|
# 2) Añadir columna generada 'active_flag'
|
|
# Será 1 si status = 'ACTIVE', y NULL en cualquier otro caso
|
|
- sql:
|
|
sql: |
|
|
ALTER TABLE carts
|
|
ADD COLUMN active_flag TINYINT(1)
|
|
GENERATED ALWAYS AS (
|
|
CASE WHEN status = 'ACTIVE' THEN 1 ELSE NULL END
|
|
);
|
|
|
|
# 3) Crear el nuevo índice único:
|
|
# solo limita (user_id, active_flag=1),
|
|
# se permiten muchos registros con active_flag NULL (LOCKED, COMPLETED, etc.)
|
|
- sql:
|
|
sql: |
|
|
CREATE UNIQUE INDEX uq_carts_user_active
|
|
ON carts (user_id, active_flag);
|
|
|
|
rollback:
|
|
# 🔙 1) Eliminar el índice nuevo basado en active_flag
|
|
- sql:
|
|
sql: |
|
|
ALTER TABLE carts
|
|
DROP INDEX uq_carts_user_active;
|
|
|
|
# 🔙 2) Eliminar la columna generada active_flag
|
|
- sql:
|
|
sql: |
|
|
ALTER TABLE carts
|
|
DROP COLUMN active_flag;
|
|
|
|
# 🔙 3) Restaurar el índice único original (user_id, status)
|
|
- sql:
|
|
sql: |
|
|
CREATE UNIQUE INDEX uq_carts_user_active
|
|
ON carts (user_id, status);
|