Files
mars/MARS_Packages/REL01_ADDITIONS/MARS-828/test/test_all_strategies.sql
2026-02-02 11:18:42 +01:00

201 lines
7.8 KiB
MySQL

-- ===================================================================
-- MARS-828: Fix CSDB configuration and test all archival strategies
-- ===================================================================
-- Purpose: Correct CSDB strategy and comprehensive testing
-- Author: Grzegorz Michalski
-- Date: 2026-01-28
-- ===================================================================
SET SERVEROUTPUT ON SIZE UNLIMITED
SET LINESIZE 200
SET PAGESIZE 1000
PROMPT
PROMPT ========================================
PROMPT MARS-828: Fix Configuration & Test Strategies
PROMPT ========================================
PROMPT
-- Step 1: Fix CSDB configurations (all CSDB_DEBT* tables)
PROMPT Step 1: Updating CSDB configurations...
PROMPT ========================================
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
MINIMUM_AGE_MONTHS = 6
WHERE A_SOURCE_KEY = 'CSDB'
AND SOURCE_FILE_TYPE = 'INPUT'
AND TABLE_ID LIKE 'CSDB_DEBT%';
COMMIT;
-- Step 2: Verify updated CSDB configurations
PROMPT
PROMPT Step 2: Verify CSDB Configurations
PROMPT ====================================
SELECT
SOURCE_FILE_ID,
TABLE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'CSDB'
AND SOURCE_FILE_TYPE = 'INPUT'
AND TABLE_ID LIKE 'CSDB_DEBT%'
ORDER BY TABLE_ID;
-- Step 3: View final test configurations
PROMPT
PROMPT Step 3: Final Test Configurations
PROMPT ==================================
SELECT
A_SOURCE_KEY,
SUBSTR(TABLE_ID, 1, 35) AS TABLE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS,
DAYS_FOR_ARCHIVE_THRESHOLD
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND (
(A_SOURCE_KEY = 'C2D' AND SOURCE_FILE_ID = 'UC_ACC')
OR (A_SOURCE_KEY = 'LM' AND SOURCE_FILE_ID = 'AdhocAdjustment' AND TABLE_ID = 'LM_ADHOC_ADJUSTMENTS_ITEM')
OR (A_SOURCE_KEY = 'CSDB' AND TABLE_ID LIKE 'CSDB_DEBT%')
OR (A_SOURCE_KEY = 'TOP' AND TABLE_ID = 'TOP_FULLBID_ARRAY_COMPILED')
)
ORDER BY
CASE A_SOURCE_KEY
WHEN 'C2D' THEN 1
WHEN 'LM' THEN 2
WHEN 'CSDB' THEN 3
WHEN 'TOP' THEN 4
END,
TABLE_ID;
-- Step 4: Test GET_ARCHIVAL_WHERE_CLAUSE via DBMS_OUTPUT
PROMPT
PROMPT Step 4: Testing WHERE Clause Generation
PROMPT ========================================
DECLARE
vConfig CT_MRDS.A_SOURCE_FILE_CONFIG%ROWTYPE;
vWhereClause VARCHAR2(4000);
BEGIN
-- Test 1: THRESHOLD_BASED
SELECT * INTO vConfig
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'C2D'
AND SOURCE_FILE_ID = 'UC_ACC'
AND ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE('========================================');
DBMS_OUTPUT.PUT_LINE('Test 1: THRESHOLD_BASED (C2D/UC_ACC)');
DBMS_OUTPUT.PUT_LINE('Expected: extract(day from (systimestamp - workflow_start)) > 30');
DBMS_OUTPUT.PUT_LINE('NOTE: Cannot test private function directly');
DBMS_OUTPUT.PUT_LINE('Strategy: ' || vConfig.ARCHIVAL_STRATEGY);
DBMS_OUTPUT.PUT_LINE('Threshold: ' || vConfig.DAYS_FOR_ARCHIVE_THRESHOLD);
-- Test 2: CURRENT_MONTH_ONLY
SELECT * INTO vConfig
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'LM'
AND SOURCE_FILE_ID = 'AdhocAdjustment'
AND TABLE_ID = 'LM_ADHOC_ADJUSTMENTS_ITEM'
AND ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE('========================================');
DBMS_OUTPUT.PUT_LINE('Test 2: CURRENT_MONTH_ONLY (LM/AdhocAdjustment)');
DBMS_OUTPUT.PUT_LINE('Expected: TRUNC(workflow_start, ''MM'') < TRUNC(SYSDATE, ''MM'')');
DBMS_OUTPUT.PUT_LINE('Strategy: ' || vConfig.ARCHIVAL_STRATEGY);
DBMS_OUTPUT.PUT_LINE('Min Age: ' || NVL(TO_CHAR(vConfig.MINIMUM_AGE_MONTHS), 'NULL'));
-- Test 3: MINIMUM_AGE_MONTHS
SELECT * INTO vConfig
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'CSDB'
AND TABLE_ID = 'CSDB_DEBT'
AND ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE('========================================');
DBMS_OUTPUT.PUT_LINE('Test 3: MINIMUM_AGE_MONTHS (CSDB/CSDB_DEBT)');
DBMS_OUTPUT.PUT_LINE('Expected: workflow_start < ADD_MONTHS(TRUNC(SYSDATE, ''MM''), -6)');
DBMS_OUTPUT.PUT_LINE('Strategy: ' || vConfig.ARCHIVAL_STRATEGY);
DBMS_OUTPUT.PUT_LINE('Min Age: ' || vConfig.MINIMUM_AGE_MONTHS || ' months');
-- Test 4: HYBRID
SELECT * INTO vConfig
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'TOP'
AND TABLE_ID = 'TOP_FULLBID_ARRAY_COMPILED'
AND ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE('========================================');
DBMS_OUTPUT.PUT_LINE('Test 4: HYBRID (TOP/TOP_FULLBID_ARRAY_COMPILED)');
DBMS_OUTPUT.PUT_LINE('Expected: TRUNC(workflow_start, ''MM'') < TRUNC(SYSDATE, ''MM'')');
DBMS_OUTPUT.PUT_LINE(' AND workflow_start < ADD_MONTHS(TRUNC(SYSDATE, ''MM''), -3)');
DBMS_OUTPUT.PUT_LINE('Strategy: ' || vConfig.ARCHIVAL_STRATEGY);
DBMS_OUTPUT.PUT_LINE('Min Age: ' || vConfig.MINIMUM_AGE_MONTHS || ' months');
DBMS_OUTPUT.PUT_LINE('========================================');
END;
/
-- Step 5: Test archival statistics simulation
PROMPT
PROMPT Step 5: Archive Statistics Simulation
PROMPT ======================================
PROMPT NOTE: This simulates what GATHER_TABLE_STAT would calculate
PROMPT
-- Create test scenario date ranges
DECLARE
vCurrentDate DATE := TRUNC(SYSDATE);
vCurrentMonth DATE := TRUNC(SYSDATE, 'MM');
v3MonthsAgo DATE := ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -3);
v6MonthsAgo DATE := ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -6);
v30DaysAgo DATE := SYSDATE - 30;
BEGIN
DBMS_OUTPUT.PUT_LINE('Current Date: ' || TO_CHAR(vCurrentDate, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE('Current Month Start: ' || TO_CHAR(vCurrentMonth, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE('3 Months Ago: ' || TO_CHAR(v3MonthsAgo, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE('6 Months Ago: ' || TO_CHAR(v6MonthsAgo, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE('30 Days Ago: ' || TO_CHAR(v30DaysAgo, 'YYYY-MM-DD HH24:MI:SS'));
DBMS_OUTPUT.PUT_LINE('');
-- Example: Data from 2024-08-15 (CSDB DEBT)
-- Would be archived with MINIMUM_AGE_MONTHS=6?
IF DATE '2024-08-15' < v6MonthsAgo THEN
DBMS_OUTPUT.PUT_LINE('CSDB Example: 2024-08-15 WOULD be archived (older than 6 months)');
ELSE
DBMS_OUTPUT.PUT_LINE('CSDB Example: 2024-08-15 would NOT be archived (within 6 months)');
END IF;
-- Example: Data from 2025-12-20 (LM)
-- Would be archived with CURRENT_MONTH_ONLY?
IF TRUNC(DATE '2025-12-20', 'MM') < vCurrentMonth THEN
DBMS_OUTPUT.PUT_LINE('LM Example: 2025-12-20 WOULD be archived (previous month)');
ELSE
DBMS_OUTPUT.PUT_LINE('LM Example: 2025-12-20 would NOT be archived (current month)');
END IF;
-- Example: Data from 2025-10-10 (TOP HYBRID)
-- Would be archived with HYBRID (current month + 3 months)?
IF TRUNC(DATE '2025-10-10', 'MM') < vCurrentMonth
AND DATE '2025-10-10' < v3MonthsAgo THEN
DBMS_OUTPUT.PUT_LINE('TOP Example: 2025-10-10 WOULD be archived (previous month AND older than 3 months)');
ELSE
DBMS_OUTPUT.PUT_LINE('TOP Example: 2025-10-10 would NOT be archived (within 3 months or current month)');
END IF;
END;
/
PROMPT
PROMPT ========================================
PROMPT MARS-828: Configuration & Testing Complete
PROMPT ========================================
PROMPT
PROMPT Summary:
PROMPT - All 4 strategies configured correctly
PROMPT - CSDB: 4 tables updated to MINIMUM_AGE_MONTHS (6 months)
PROMPT - LM: 1 table configured as CURRENT_MONTH_ONLY
PROMPT - TOP: 1 table configured as HYBRID (3 months)
PROMPT - C2D: 1 table kept as THRESHOLD_BASED (30 days)
PROMPT
PROMPT Next Steps:
PROMPT - Test ARCHIVE_TABLE_DATA with real data
PROMPT - Test GATHER_TABLE_STAT calculations
PROMPT - Verify archival operations in production scenario
PROMPT ========================================