39 lines
1.1 KiB
SQL
39 lines
1.1 KiB
SQL
-- Add project code and enforce uniqueness
|
|
|
|
ALTER TABLE qt_projects
|
|
ADD COLUMN code VARCHAR(100) NULL AFTER owner_username;
|
|
|
|
-- Copy code from current project name (truncate to fit)
|
|
UPDATE qt_projects
|
|
SET code = LEFT(TRIM(COALESCE(name, '')), 100);
|
|
|
|
-- Fallback for any remaining blanks
|
|
UPDATE qt_projects
|
|
SET code = uuid
|
|
WHERE code IS NULL OR TRIM(code) = '';
|
|
|
|
-- Drop unique index if it already exists to allow de-duplication updates
|
|
DROP INDEX IF EXISTS idx_qt_projects_code ON qt_projects;
|
|
|
|
-- De-duplicate codes: OPS-1948-2, OPS-1948-3... (MariaDB without CTE)
|
|
UPDATE qt_projects p
|
|
JOIN (
|
|
SELECT p1.id,
|
|
p1.code AS base_code,
|
|
(
|
|
SELECT COUNT(*)
|
|
FROM qt_projects p2
|
|
WHERE p2.code = p1.code AND p2.id <= p1.id
|
|
) AS rn
|
|
FROM qt_projects p1
|
|
) r ON r.id = p.id
|
|
SET p.code = CASE
|
|
WHEN r.rn = 1 THEN r.base_code
|
|
ELSE CONCAT(LEFT(r.base_code, 90), '-', r.rn)
|
|
END;
|
|
|
|
ALTER TABLE qt_projects
|
|
MODIFY COLUMN code VARCHAR(100) NOT NULL;
|
|
|
|
CREATE UNIQUE INDEX idx_qt_projects_code ON qt_projects(code);
|