mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 13:31:56 +00:00
99 lines
2.6 KiB
PL/PgSQL
99 lines
2.6 KiB
PL/PgSQL
BEGIN;
|
|
|
|
DROP INDEX IF EXISTS project_flocks_base_period_unique;
|
|
|
|
ALTER TABLE project_flocks
|
|
ADD COLUMN IF NOT EXISTS flock_id BIGINT;
|
|
|
|
WITH normalized AS (
|
|
SELECT
|
|
pf.id,
|
|
COALESCE(
|
|
NULLIF(TRIM(regexp_replace(pf.flock_name, '\\s+\\d+(\\s+\\d+)*$', '', 'g')), ''),
|
|
CONCAT('Project Flock ', pf.id)
|
|
) AS normalized_name,
|
|
COALESCE(NULLIF(pf.created_by, 0), 1) AS created_by
|
|
FROM project_flocks pf
|
|
),
|
|
seed_flocks AS (
|
|
SELECT DISTINCT
|
|
n.normalized_name,
|
|
MIN(n.created_by) AS created_by
|
|
FROM normalized n
|
|
GROUP BY n.normalized_name
|
|
)
|
|
INSERT INTO flocks (name, created_by, created_at, updated_at)
|
|
SELECT sf.normalized_name, sf.created_by, NOW(), NOW()
|
|
FROM seed_flocks sf
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
WITH normalized AS (
|
|
SELECT
|
|
pf.id,
|
|
COALESCE(
|
|
NULLIF(TRIM(regexp_replace(pf.flock_name, '\\s+\\d+(\\s+\\d+)*$', '', 'g')), ''),
|
|
CONCAT('Project Flock ', pf.id)
|
|
) AS normalized_name
|
|
FROM project_flocks pf
|
|
),
|
|
resolved AS (
|
|
SELECT
|
|
n.id,
|
|
f.id AS flock_id
|
|
FROM normalized n
|
|
JOIN flocks f ON LOWER(f.name) = LOWER(n.normalized_name)
|
|
)
|
|
UPDATE project_flocks pf
|
|
SET flock_id = resolved.flock_id
|
|
FROM resolved
|
|
WHERE pf.id = resolved.id;
|
|
|
|
WITH missing AS (
|
|
SELECT
|
|
pf.id,
|
|
COALESCE(
|
|
NULLIF(TRIM(regexp_replace(pf.flock_name, '\\s+\\d+(\\s+\\d+)*$', '', 'g')), ''),
|
|
CONCAT('Project Flock ', pf.id)
|
|
) AS normalized_name,
|
|
COALESCE(NULLIF(pf.created_by, 0), 1) AS created_by
|
|
FROM project_flocks pf
|
|
WHERE pf.flock_id IS NULL
|
|
),
|
|
seed_missing AS (
|
|
SELECT DISTINCT normalized_name, created_by FROM missing
|
|
)
|
|
INSERT INTO flocks (name, created_by, created_at, updated_at)
|
|
SELECT sm.normalized_name, sm.created_by, NOW(), NOW()
|
|
FROM seed_missing sm
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
WITH missing AS (
|
|
SELECT
|
|
pf.id,
|
|
COALESCE(
|
|
NULLIF(TRIM(regexp_replace(pf.flock_name, '\\s+\\d+(\\s+\\d+)*$', '', 'g')), ''),
|
|
CONCAT('Project Flock ', pf.id)
|
|
) AS normalized_name
|
|
FROM project_flocks pf
|
|
WHERE pf.flock_id IS NULL
|
|
)
|
|
UPDATE project_flocks pf
|
|
SET flock_id = f.id
|
|
FROM missing m
|
|
JOIN flocks f ON LOWER(f.name) = LOWER(m.normalized_name)
|
|
WHERE pf.id = m.id;
|
|
|
|
ALTER TABLE project_flocks
|
|
ALTER COLUMN flock_id SET NOT NULL;
|
|
|
|
DROP INDEX IF EXISTS project_flocks_flock_name_unique;
|
|
|
|
ALTER TABLE project_flocks
|
|
DROP COLUMN IF EXISTS flock_name;
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS project_flocks_flock_period_unique
|
|
ON project_flocks (flock_id, period)
|
|
WHERE deleted_at IS NULL;
|
|
|
|
COMMIT;
|