-- Test pg_retry extension -- Create test table CREATE TABLE test_retry_table (id SERIAL PRIMARY KEY, value INT); -- Test 1: Basic successful SELECT SELECT retry.retry('SELECT 42'); retry ------- 1 (1 row) -- Test 2: Basic successful INSERT SELECT retry.retry('INSERT INTO test_retry_table (value) VALUES (1)'); retry ------- 1 (1 row) -- Test 3: Basic successful UPDATE SELECT retry.retry('UPDATE test_retry_table SET value = 2 WHERE id = 1'); retry ------- 1 (1 row) -- Test 4: Basic successful DELETE SELECT retry.retry('DELETE FROM test_retry_table WHERE id = 1'); retry ------- 1 (1 row) -- Test 5: SELECT with multiple rows INSERT INTO test_retry_table (value) VALUES (10), (20), (30); SELECT retry.retry('SELECT * FROM test_retry_table'); retry ------- 3 (1 row) -- Test 6: Reject multi-statement SQL SELECT retry.retry('SELECT 1; SELECT 2'); ERROR: pg_retry: SQL must contain exactly one statement -- Test 7: Reject transaction control statements SELECT retry.retry('BEGIN; SELECT 1; COMMIT'); ERROR: pg_retry: SQL must contain exactly one statement -- Test 8: Reject transaction control (case insensitive) SELECT retry.retry('begin; select 1; commit'); ERROR: pg_retry: SQL must contain exactly one statement -- Test 9: Test with custom parameters SELECT retry.retry('SELECT 123', 2, 10, 100); retry ------- 1 (1 row) -- Test 10: Test invalid max_tries (should fail) SELECT retry.retry('SELECT 1', 0); ERROR: pg_retry: max_tries must be >= 1 -- Test 11: Test negative delay (should fail) SELECT retry.retry('SELECT 1', 3, -1); ERROR: pg_retry: delay parameters must be >= 0 -- Test 12: Test base_delay > max_delay (should fail) SELECT retry.retry('SELECT 1', 3, 100, 50); ERROR: pg_retry: base_delay_ms cannot be greater than max_delay_ms -- Test 13: Allow semicolons in string literals SELECT retry.retry('SELECT ''a;b;c'''); retry ------- 1 (1 row) -- Test 14: Allow semicolons in JSON values SELECT retry.retry('SELECT json_build_object(''key'', ''value;with;semicolons'')'); retry ------- 1 (1 row) -- Test 15: Allow semicolons in comments SELECT retry.retry('-- This comment has ; in it SELECT 42'); retry ------- 1 (1 row) -- Test 16: Still reject actual multiple statements SELECT retry.retry('SELECT 1; SELECT 2'); ERROR: pg_retry: SQL must contain exactly one statement -- Clean up DROP TABLE test_retry_table;