church-api/cleanup_manual_hymn_titles.sql
Benjamin Slingo da06dae89d NUCLEAR: Delete db_operations.rs entirely
- Remove entire utils/db_operations.rs file and all *Operations patterns
- Comment out imports to dead operations
- This breaks compilation temporarily but eliminates the maintenance nightmare
- Next: rewrite db:: modules to use direct SQL instead of operations
- Goal: Clean Handler → Service → Database pattern only
2025-08-28 21:36:14 -04:00

114 lines
4.2 KiB
SQL

-- SQL script to remove manually added hymn titles from bulletins
-- This will clean up patterns like "#319 - Amazing Grace" back to just "#319"
-- Run these in order and test on a backup first!
-- STEP 1: Preview what will be changed (RUN THIS FIRST)
-- This shows what changes would be made without actually making them
SELECT
id,
title,
date,
'divine_worship' as field_name,
divine_worship as original_content,
-- Clean up various hymn title patterns
REGEXP_REPLACE(
REGEXP_REPLACE(
REGEXP_REPLACE(
REGEXP_REPLACE(divine_worship,
'#([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)', -- Pattern: #123 - Title
'#\1', 'g'),
'Hymn\s+([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)', -- Pattern: Hymn 123 - Title
'Hymn \1', 'g'),
'No\.\s*([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)', -- Pattern: No. 123 - Title
'No. \1', 'g'),
'Number\s+([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)', -- Pattern: Number 123 - Title
'Number \1', 'g'
) as cleaned_content
FROM bulletins
WHERE divine_worship IS NOT NULL
AND (divine_worship LIKE '%#[0-9]%-%' OR
divine_worship LIKE '%Hymn [0-9]%-%' OR
divine_worship LIKE '%No. [0-9]%-%' OR
divine_worship LIKE '%Number [0-9]%-%')
UNION ALL
SELECT
id,
title,
date,
'sabbath_school' as field_name,
sabbath_school as original_content,
-- Clean up various hymn title patterns
REGEXP_REPLACE(
REGEXP_REPLACE(
REGEXP_REPLACE(
REGEXP_REPLACE(sabbath_school,
'#([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)', -- Pattern: #123 - Title
'#\1', 'g'),
'Hymn\s+([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)', -- Pattern: Hymn 123 - Title
'Hymn \1', 'g'),
'No\.\s*([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)', -- Pattern: No. 123 - Title
'No. \1', 'g'),
'Number\s+([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)', -- Pattern: Number 123 - Title
'Number \1', 'g'
) as cleaned_content
FROM bulletins
WHERE sabbath_school IS NOT NULL
AND (sabbath_school LIKE '%#[0-9]%-%' OR
sabbath_school LIKE '%Hymn [0-9]%-%' OR
sabbath_school LIKE '%No. [0-9]%-%' OR
sabbath_school LIKE '%Number [0-9]%-%')
ORDER BY date DESC;
-- STEP 2: BACKUP YOUR DATA FIRST!
-- CREATE TABLE bulletins_backup AS SELECT * FROM bulletins;
-- STEP 3: Actually clean up divine_worship field (ONLY RUN AFTER TESTING)
/*
UPDATE bulletins
SET divine_worship = REGEXP_REPLACE(
REGEXP_REPLACE(
REGEXP_REPLACE(
REGEXP_REPLACE(divine_worship,
'#([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)',
'#\1', 'g'),
'Hymn\s+([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)',
'Hymn \1', 'g'),
'No\.\s*([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)',
'No. \1', 'g'),
'Number\s+([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)',
'Number \1', 'g'
)
WHERE divine_worship IS NOT NULL
AND (divine_worship LIKE '%#[0-9]%-%' OR
divine_worship LIKE '%Hymn [0-9]%-%' OR
divine_worship LIKE '%No. [0-9]%-%' OR
divine_worship LIKE '%Number [0-9]%-%');
*/
-- STEP 4: Actually clean up sabbath_school field (ONLY RUN AFTER TESTING)
/*
UPDATE bulletins
SET sabbath_school = REGEXP_REPLACE(
REGEXP_REPLACE(
REGEXP_REPLACE(
REGEXP_REPLACE(sabbath_school,
'#([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)',
'#\1', 'g'),
'Hymn\s+([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)',
'Hymn \1', 'g'),
'No\.\s*([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)',
'No. \1', 'g'),
'Number\s+([0-9]{1,3})\s*-\s*[^.!?]*?(?=\s|$|<|\.|\n)',
'Number \1', 'g'
)
WHERE sabbath_school IS NOT NULL
AND (sabbath_school LIKE '%#[0-9]%-%' OR
sabbath_school LIKE '%Hymn [0-9]%-%' OR
sabbath_school LIKE '%No. [0-9]%-%' OR
sabbath_school LIKE '%Number [0-9]%-%');
*/
-- STEP 5: Verify the cleanup worked
-- SELECT COUNT(*) FROM bulletins WHERE divine_worship LIKE '%#[0-9]%-%' OR sabbath_school LIKE '%#[0-9]%-%';