Sindbad~EG File Manager

Current Path : /home/copmadinaarea/thecopmadinaarea.org/reports/database/
Upload File :
Current File : /home/copmadinaarea/thecopmadinaarea.org/reports/database/verify_operational_tables.sql

-- OPERATIONAL STATISTICS - DATABASE VERIFICATION SCRIPT
-- Run this script to verify all tables were created correctly
-- Usage: mysql -u username -p database_name < verify_operational_tables.sql

-- ============================================
-- SECTION 1: CHECK TABLE EXISTENCE
-- ============================================

SELECT '=== CHECKING TABLE EXISTENCE ===' AS '';

SELECT 
    CASE 
        WHEN COUNT(*) = 6 THEN '✓ SUCCESS: All 6 tables exist'
        ELSE CONCAT('✗ ERROR: Only ', COUNT(*), ' of 6 tables found')
    END AS 'Table Count Status'
FROM information_schema.tables 
WHERE table_schema = DATABASE() 
AND table_name IN (
    'assembly_worship_data',
    'outreach_souls_data',
    'baptism_events_data',
    'worship_attendance_data',
    'social_interventions_data',
    'tithes_missions_data'
);

SELECT 
    table_name AS 'Table Name',
    CASE 
        WHEN table_name IS NOT NULL THEN '✓ EXISTS'
        ELSE '✗ MISSING'
    END AS 'Status'
FROM (
    SELECT 'assembly_worship_data' AS table_name
    UNION SELECT 'outreach_souls_data'
    UNION SELECT 'baptism_events_data'
    UNION SELECT 'worship_attendance_data'
    UNION SELECT 'social_interventions_data'
    UNION SELECT 'tithes_missions_data'
) expected
LEFT JOIN information_schema.tables t 
    ON t.table_name = expected.table_name 
    AND t.table_schema = DATABASE();

-- ============================================
-- SECTION 2: CHECK TABLE STRUCTURES
-- ============================================

SELECT '=== CHECKING TABLE STRUCTURES ===' AS '';

-- Assembly Worship Data
SELECT 
    'assembly_worship_data' AS 'Table',
    COUNT(*) AS 'Column Count',
    CASE 
        WHEN COUNT(*) >= 20 THEN '✓ OK'
        ELSE '✗ INCOMPLETE'
    END AS 'Status'
FROM information_schema.columns 
WHERE table_schema = DATABASE() 
AND table_name = 'assembly_worship_data';

-- Outreach Souls Data
SELECT 
    'outreach_souls_data' AS 'Table',
    COUNT(*) AS 'Column Count',
    CASE 
        WHEN COUNT(*) >= 18 THEN '✓ OK'
        ELSE '✗ INCOMPLETE'
    END AS 'Status'
FROM information_schema.columns 
WHERE table_schema = DATABASE() 
AND table_name = 'outreach_souls_data';

-- Baptism Events Data
SELECT 
    'baptism_events_data' AS 'Table',
    COUNT(*) AS 'Column Count',
    CASE 
        WHEN COUNT(*) >= 28 THEN '✓ OK'
        ELSE '✗ INCOMPLETE'
    END AS 'Status'
FROM information_schema.columns 
WHERE table_schema = DATABASE() 
AND table_name = 'baptism_events_data';

-- Worship Attendance Data
SELECT 
    'worship_attendance_data' AS 'Table',
    COUNT(*) AS 'Column Count',
    CASE 
        WHEN COUNT(*) >= 21 THEN '✓ OK'
        ELSE '✗ INCOMPLETE'
    END AS 'Status'
FROM information_schema.columns 
WHERE table_schema = DATABASE() 
AND table_name = 'worship_attendance_data';

-- Social Interventions Data
SELECT 
    'social_interventions_data' AS 'Table',
    COUNT(*) AS 'Column Count',
    CASE 
        WHEN COUNT(*) >= 19 THEN '✓ OK'
        ELSE '✗ INCOMPLETE'
    END AS 'Status'
FROM information_schema.columns 
WHERE table_schema = DATABASE() 
AND table_name = 'social_interventions_data';

-- Tithes Missions Data
SELECT 
    'tithes_missions_data' AS 'Table',
    COUNT(*) AS 'Column Count',
    CASE 
        WHEN COUNT(*) >= 9 THEN '✓ OK'
        ELSE '✗ INCOMPLETE'
    END AS 'Status'
FROM information_schema.columns 
WHERE table_schema = DATABASE() 
AND table_name = 'tithes_missions_data';

-- ============================================
-- SECTION 3: CHECK FOREIGN KEYS
-- ============================================

SELECT '=== CHECKING FOREIGN KEY CONSTRAINTS ===' AS '';

SELECT 
    table_name AS 'Table',
    COUNT(*) AS 'Foreign Keys',
    CASE 
        WHEN COUNT(*) >= 3 THEN '✓ OK (area, district, assembly)'
        ELSE '✗ MISSING CONSTRAINTS'
    END AS 'Status'
FROM information_schema.key_column_usage
WHERE table_schema = DATABASE()
AND table_name IN (
    'assembly_worship_data',
    'outreach_souls_data',
    'baptism_events_data',
    'worship_attendance_data',
    'social_interventions_data',
    'tithes_missions_data'
)
AND referenced_table_name IS NOT NULL
GROUP BY table_name
ORDER BY table_name;

-- ============================================
-- SECTION 4: CHECK UNIQUE CONSTRAINTS
-- ============================================

SELECT '=== CHECKING UNIQUE CONSTRAINTS ===' AS '';

SELECT 
    table_name AS 'Table',
    COUNT(DISTINCT constraint_name) AS 'Unique Constraints',
    CASE 
        WHEN COUNT(DISTINCT constraint_name) >= 1 THEN '✓ OK (assembly_id unique)'
        ELSE '✗ MISSING'
    END AS 'Status'
FROM information_schema.table_constraints
WHERE table_schema = DATABASE()
AND table_name IN (
    'assembly_worship_data',
    'outreach_souls_data',
    'baptism_events_data',
    'worship_attendance_data',
    'social_interventions_data',
    'tithes_missions_data'
)
AND constraint_type = 'UNIQUE'
GROUP BY table_name
ORDER BY table_name;

-- ============================================
-- SECTION 5: CHECK GENERATED COLUMNS
-- ============================================

SELECT '=== CHECKING GENERATED/COMPUTED COLUMNS ===' AS '';

-- Assembly Worship - should have 2 generated columns
SELECT 
    'assembly_worship_data' AS 'Table',
    COUNT(*) AS 'Generated Columns',
    GROUP_CONCAT(column_name) AS 'Column Names',
    CASE 
        WHEN COUNT(*) >= 2 THEN '✓ OK'
        ELSE '✗ MISSING'
    END AS 'Status'
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name = 'assembly_worship_data'
AND extra LIKE '%GENERATED%';

-- Outreach Souls - should have 1 generated column
SELECT 
    'outreach_souls_data' AS 'Table',
    COUNT(*) AS 'Generated Columns',
    GROUP_CONCAT(column_name) AS 'Column Names',
    CASE 
        WHEN COUNT(*) >= 1 THEN '✓ OK'
        ELSE '✗ MISSING'
    END AS 'Status'
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name = 'outreach_souls_data'
AND extra LIKE '%GENERATED%';

-- Baptism Events - should have 5 generated columns
SELECT 
    'baptism_events_data' AS 'Table',
    COUNT(*) AS 'Generated Columns',
    GROUP_CONCAT(column_name) AS 'Column Names',
    CASE 
        WHEN COUNT(*) >= 5 THEN '✓ OK'
        ELSE '✗ MISSING'
    END AS 'Status'
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name = 'baptism_events_data'
AND extra LIKE '%GENERATED%';

-- Social Interventions - should have 3 generated columns
SELECT 
    'social_interventions_data' AS 'Table',
    COUNT(*) AS 'Generated Columns',
    GROUP_CONCAT(column_name) AS 'Column Names',
    CASE 
        WHEN COUNT(*) >= 3 THEN '✓ OK'
        ELSE '✗ MISSING'
    END AS 'Status'
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name = 'social_interventions_data'
AND extra LIKE '%GENERATED%';

-- Tithes Missions - should have 1 generated column
SELECT 
    'tithes_missions_data' AS 'Table',
    COUNT(*) AS 'Generated Columns',
    GROUP_CONCAT(column_name) AS 'Column Names',
    CASE 
        WHEN COUNT(*) >= 1 THEN '✓ OK'
        ELSE '✗ MISSING'
    END AS 'Status'
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name = 'tithes_missions_data'
AND extra LIKE '%GENERATED%';

-- ============================================
-- SECTION 6: CHECK INDEXES
-- ============================================

SELECT '=== CHECKING INDEXES ===' AS '';

SELECT 
    table_name AS 'Table',
    COUNT(DISTINCT index_name) AS 'Index Count',
    CASE 
        WHEN COUNT(DISTINCT index_name) >= 4 THEN '✓ OK'
        ELSE '⚠ FEW INDEXES'
    END AS 'Status'
FROM information_schema.statistics
WHERE table_schema = DATABASE()
AND table_name IN (
    'assembly_worship_data',
    'outreach_souls_data',
    'baptism_events_data',
    'worship_attendance_data',
    'social_interventions_data',
    'tithes_missions_data'
)
GROUP BY table_name
ORDER BY table_name;

-- ============================================
-- SECTION 7: CHECK AUDIT FIELDS
-- ============================================

SELECT '=== CHECKING AUDIT FIELDS ===' AS '';

SELECT 
    table_name AS 'Table',
    CASE 
        WHEN SUM(CASE WHEN column_name = 'created_by' THEN 1 ELSE 0 END) = 1
         AND SUM(CASE WHEN column_name = 'updated_by' THEN 1 ELSE 0 END) = 1
         AND SUM(CASE WHEN column_name = 'created_at' THEN 1 ELSE 0 END) = 1
         AND SUM(CASE WHEN column_name = 'updated_at' THEN 1 ELSE 0 END) = 1
        THEN '✓ ALL AUDIT FIELDS PRESENT'
        ELSE '✗ MISSING AUDIT FIELDS'
    END AS 'Status'
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name IN (
    'assembly_worship_data',
    'outreach_souls_data',
    'baptism_events_data',
    'worship_attendance_data',
    'social_interventions_data',
    'tithes_missions_data'
)
GROUP BY table_name
ORDER BY table_name;

-- ============================================
-- SECTION 8: OVERALL SUMMARY
-- ============================================

SELECT '=== OVERALL VERIFICATION SUMMARY ===' AS '';

SELECT 
    'Total Tables Created' AS 'Metric',
    COUNT(*) AS 'Value',
    '6 expected' AS 'Expected'
FROM information_schema.tables 
WHERE table_schema = DATABASE() 
AND table_name IN (
    'assembly_worship_data',
    'outreach_souls_data',
    'baptism_events_data',
    'worship_attendance_data',
    'social_interventions_data',
    'tithes_missions_data'
);

SELECT 
    'Total Columns' AS 'Metric',
    COUNT(*) AS 'Value',
    '~115 expected' AS 'Expected'
FROM information_schema.columns 
WHERE table_schema = DATABASE() 
AND table_name IN (
    'assembly_worship_data',
    'outreach_souls_data',
    'baptism_events_data',
    'worship_attendance_data',
    'social_interventions_data',
    'tithes_missions_data'
);

SELECT 
    'Total Foreign Keys' AS 'Metric',
    COUNT(*) AS 'Value',
    '18 expected (3 per table)' AS 'Expected'
FROM information_schema.key_column_usage
WHERE table_schema = DATABASE()
AND table_name IN (
    'assembly_worship_data',
    'outreach_souls_data',
    'baptism_events_data',
    'worship_attendance_data',
    'social_interventions_data',
    'tithes_missions_data'
)
AND referenced_table_name IS NOT NULL;

SELECT 
    'Total Generated Columns' AS 'Metric',
    COUNT(*) AS 'Value',
    '12 expected' AS 'Expected'
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name IN (
    'assembly_worship_data',
    'outreach_souls_data',
    'baptism_events_data',
    'worship_attendance_data',
    'social_interventions_data',
    'tithes_missions_data'
)
AND extra LIKE '%GENERATED%';

-- ============================================
-- SECTION 9: SAMPLE DATA TEST
-- ============================================

SELECT '=== TESTING SAMPLE DATA INSERTION ===' AS '';

-- Test insert into assembly_worship_data (will fail if table doesn't exist or constraints are wrong)
-- Note: This assumes assembly_id 1 exists in your assemblies table
-- Uncomment the following lines to test:

/*
INSERT INTO assembly_worship_data (
    area_id, district_id, assembly_id,
    new_assemblies, closed_assemblies,
    home_cell_meetings, home_cell_male_attendance, home_cell_female_attendance,
    created_by
) VALUES (1, 1, 1, 1, 0, 10, 25, 20, 1)
ON DUPLICATE KEY UPDATE new_assemblies = 1;

SELECT 
    'Sample Insert Test' AS 'Test',
    CASE 
        WHEN home_cell_total_attendance = 45 THEN '✓ Generated column working'
        ELSE '✗ Generated column not working'
    END AS 'Result'
FROM assembly_worship_data 
WHERE assembly_id = 1
LIMIT 1;
*/

-- ============================================
-- FINAL STATUS
-- ============================================

SELECT '=== VERIFICATION COMPLETE ===' AS '';
SELECT 'Review the results above to ensure all checks passed.' AS 'Note';
SELECT 'Look for ✓ symbols - these indicate successful verification.' AS 'Tip';
SELECT 'Any ✗ symbols indicate issues that need to be resolved.' AS 'Warning';

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists