From aaff42b0eac54654d9cfd42ae4d5db4c1129764b Mon Sep 17 00:00:00 2001 From: Henson Choi Date: Sat, 4 Apr 2026 22:00:50 +0900 Subject: [PATCH] Rename rpr_explain test views from sequential numbers to descriptive names Replace rpr_ev01..rpr_ev89 with section-based names like rpr_ev_ctx_absorb_group, rpr_ev_alt_nested_start, etc. This avoids numbering conflicts when inserting new tests. --- src/test/regress/expected/rpr_explain.out | 378 +++++++++++----------- src/test/regress/sql/rpr_explain.sql | 372 ++++++++++----------- 2 files changed, 375 insertions(+), 375 deletions(-) diff --git a/src/test/regress/expected/rpr_explain.out b/src/test/regress/expected/rpr_explain.out index 560f21f44c2..f66caf8908e 100644 --- a/src/test/regress/expected/rpr_explain.out +++ b/src/test/regress/expected/rpr_explain.out @@ -111,7 +111,7 @@ VALUES -- Basic NFA Statistics Tests -- ============================================================ -- Simple pattern - should show basic statistics -CREATE VIEW rpr_ev01 AS +CREATE VIEW rpr_ev_basic_simple AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -120,7 +120,7 @@ WINDOW w AS ( PATTERN (A B) DEFINE A AS cat = 'A', B AS cat = 'B' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev01'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_basic_simple'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------ PATTERN (a b) @@ -150,7 +150,7 @@ WINDOW w AS ( (9 rows) -- Pattern with no matches - 0 matched -CREATE VIEW rpr_ev02 AS +CREATE VIEW rpr_ev_basic_nomatch AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -159,7 +159,7 @@ WINDOW w AS ( PATTERN (X Y Z) DEFINE X AS cat = 'X', Y AS cat = 'Y', Z AS cat = 'Z' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev02'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_basic_nomatch'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------- PATTERN (x y z) @@ -188,7 +188,7 @@ WINDOW w AS ( (8 rows) -- Pattern matching every row - high match count -CREATE VIEW rpr_ev03 AS +CREATE VIEW rpr_ev_basic_allrows AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -197,7 +197,7 @@ WINDOW w AS ( PATTERN (R) DEFINE R AS TRUE ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev03'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_basic_allrows'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ---------------- PATTERN (r) @@ -227,7 +227,7 @@ WINDOW w AS ( -- Regression test: Space before parenthesis in pattern deparse -- Verifies that "A (B | C)" correctly outputs as "a (b | c)" with space -CREATE VIEW rpr_ev04 AS +CREATE VIEW rpr_ev_basic_deparse_space AS SELECT count(*) OVER w FROM generate_series(1, 20) AS s(v) WINDOW w AS ( @@ -235,7 +235,7 @@ WINDOW w AS ( PATTERN (A (B | C)) DEFINE A AS v % 3 = 1, B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev04'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_basic_deparse_space'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------------ PATTERN (a (b | c)) @@ -266,7 +266,7 @@ WINDOW w AS ( -- Regression test: Sequential alternations at same depth -- Verifies that "((B | C) (D | E))" correctly outputs as "(b | c) (d | e)" -- Previously failed due to missing parentheses on ALT depth decrease -CREATE VIEW rpr_ev05 AS +CREATE VIEW rpr_ev_basic_deparse_seqalt AS SELECT count(*) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -274,7 +274,7 @@ WINDOW w AS ( PATTERN (A ((B | C) (D | E))*) DEFINE A AS v % 5 = 1, B AS v % 5 = 2, C AS v % 5 = 3, D AS v % 5 = 4, E AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev05'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_basic_deparse_seqalt'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ----------------------------------- PATTERN (a ((b | c) (d | e))*) @@ -305,7 +305,7 @@ WINDOW w AS ( -- State Statistics Tests (peak, total, merged) -- ============================================================ -- Simple quantifier pattern - A+ with short matches (no merging) -CREATE VIEW rpr_ev06 AS +CREATE VIEW rpr_ev_state_simple_quant AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -314,7 +314,7 @@ WINDOW w AS ( PATTERN (A+) DEFINE A AS v % 2 = 1 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev06'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_simple_quant'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ----------------- PATTERN (a+) @@ -343,7 +343,7 @@ WINDOW w AS ( (8 rows) -- Alternation pattern - multiple state branches -CREATE VIEW rpr_ev07 AS +CREATE VIEW rpr_ev_state_alt AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -354,7 +354,7 @@ WINDOW w AS ( A AS cat = 'A', B AS cat = 'B', C AS cat = 'C', D AS cat = 'D', E AS cat = 'E' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev07'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_alt'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ---------------------------------- PATTERN ((a | b | c) (d | e)) @@ -386,7 +386,7 @@ WINDOW w AS ( (9 rows) -- Complex pattern with high state count -CREATE VIEW rpr_ev08 AS +CREATE VIEW rpr_ev_state_complex AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -398,7 +398,7 @@ WINDOW w AS ( B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev08'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_complex'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ----------------------- PATTERN (a+ b* c+) @@ -431,7 +431,7 @@ WINDOW w AS ( (9 rows) -- Grouped pattern with quantifier - state count with grouping -CREATE VIEW rpr_ev09 AS +CREATE VIEW rpr_ev_state_group_quant AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -440,7 +440,7 @@ WINDOW w AS ( PATTERN ((A B)+) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev09'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_group_quant'), E'\n')) AS line WHERE line ~ 'PATTERN'; line --------------------- PATTERN ((a b)+) @@ -471,7 +471,7 @@ WINDOW w AS ( -- State explosion pattern - many alternations -- Pattern (A|B)(A|B)(A|B)(A|B) can create many parallel states -CREATE VIEW rpr_ev10 AS +CREATE VIEW rpr_ev_state_explosion AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -480,7 +480,7 @@ WINDOW w AS ( PATTERN ((A | B) (A | B) (A | B) (A | B) (A | B) (A | B) (A | B) (A | B)) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev10'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_explosion'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------------------------------------------------------------------ PATTERN ((a | b) (a | b) (a | b) (a | b) (a | b) (a | b) (a | b) (a | b)) @@ -511,7 +511,7 @@ WINDOW w AS ( -- Consecutive ALT merge followed by different ALT -- Tests mergeConsecutiveAlts flush on ALT change: (A|B){2} (C|D) -CREATE VIEW rpr_ev11 AS +CREATE VIEW rpr_ev_state_alt_merge_alt AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -520,7 +520,7 @@ WINDOW w AS ( PATTERN ((A | B) (A | B) (C | D)) DEFINE A AS v % 4 = 0, B AS v % 4 = 1, C AS v % 4 = 2, D AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev11'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_alt_merge_alt'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------------------------- PATTERN ((a | b) (a | b) (c | d)) @@ -551,7 +551,7 @@ WINDOW w AS ( -- Consecutive ALT merge followed by non-ALT element -- Tests mergeConsecutiveAlts flush on non-ALT: (A|B){2} c -CREATE VIEW rpr_ev12 AS +CREATE VIEW rpr_ev_state_alt_merge_nonalt AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -560,7 +560,7 @@ WINDOW w AS ( PATTERN ((A | B) (A | B) C) DEFINE A AS v % 3 = 0, B AS v % 3 = 1, C AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev12'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_alt_merge_nonalt'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------------------- PATTERN ((a | b) (a | b) c) @@ -590,7 +590,7 @@ WINDOW w AS ( (9 rows) -- ALT prefix/suffix absorbed into GROUP: (A|B) (A|B)+ (A|B) -> (A|B){3,} -CREATE VIEW rpr_ev13 AS +CREATE VIEW rpr_ev_state_alt_absorb_group AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -599,7 +599,7 @@ WINDOW w AS ( PATTERN ((A | B) (A | B)+ (A | B)) DEFINE A AS v % 2 = 0, B AS v % 2 = 1 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev13'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_alt_absorb_group'), E'\n')) AS line WHERE line ~ 'PATTERN'; line --------------------------------------- PATTERN ((a | b) (a | b)+ (a | b)) @@ -629,7 +629,7 @@ WINDOW w AS ( (9 rows) -- High state count - alternation with plus quantifier -CREATE VIEW rpr_ev14 AS +CREATE VIEW rpr_ev_state_alt_plus AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -638,7 +638,7 @@ WINDOW w AS ( PATTERN ((A | B | C)+ D) DEFINE A AS v % 4 = 1, B AS v % 4 = 2, C AS v % 4 = 3, D AS v % 4 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev14'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_alt_plus'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ----------------------------- PATTERN ((a | b | c)+ d) @@ -669,7 +669,7 @@ WINDOW w AS ( -- Early termination: first ALT branch (A) reaches FIN immediately, -- pruning second branch (A B+) before it can accumulate B repetitions. -CREATE VIEW rpr_ev15 AS +CREATE VIEW rpr_ev_state_alt_prune AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -678,7 +678,7 @@ WINDOW w AS ( PATTERN ((A | A B)+) DEFINE A AS v = 1, B AS v > 1 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev15'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_alt_prune'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------------- PATTERN ((a | a b)+) @@ -707,7 +707,7 @@ WINDOW w AS ( (8 rows) -- Nested quantifiers causing state growth -CREATE VIEW rpr_ev16 AS +CREATE VIEW rpr_ev_state_nested_quant AS SELECT count(*) OVER w FROM generate_series(1, 1000) AS s(v) WINDOW w AS ( @@ -716,7 +716,7 @@ WINDOW w AS ( PATTERN (((A | B)+)+) DEFINE A AS v % 3 = 1, B AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev16'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_nested_quant'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------------- PATTERN (((a | b)+)+) @@ -749,7 +749,7 @@ WINDOW w AS ( -- Context Statistics Tests (peak, total, pruned + absorbed/skipped) -- ============================================================ -- Context absorption with unbounded quantifier at start -CREATE VIEW rpr_ev17 AS +CREATE VIEW rpr_ev_ctx_absorb_unbounded AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -758,7 +758,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev17'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_absorb_unbounded'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -788,7 +788,7 @@ WINDOW w AS ( (9 rows) -- No absorption - bounded quantifier -CREATE VIEW rpr_ev18 AS +CREATE VIEW rpr_ev_ctx_no_absorb AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -797,7 +797,7 @@ WINDOW w AS ( PATTERN (A{2,4} B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev18'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_no_absorb'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ----------------------- PATTERN (a{2,4} b) @@ -827,7 +827,7 @@ WINDOW w AS ( (9 rows) -- Contexts skipped by SKIP PAST LAST ROW -CREATE VIEW rpr_ev19 AS +CREATE VIEW rpr_ev_ctx_skip AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -836,7 +836,7 @@ WINDOW w AS ( PATTERN (A B C) DEFINE A AS v % 10 = 1, B AS v % 10 = 2, C AS v % 10 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev19'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_skip'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------- PATTERN (a b c) @@ -866,7 +866,7 @@ WINDOW w AS ( (9 rows) -- High context absorption - unbounded group -CREATE VIEW rpr_ev20 AS +CREATE VIEW rpr_ev_ctx_absorb_group AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -875,7 +875,7 @@ WINDOW w AS ( PATTERN ((A B)+ C) DEFINE A AS v % 3 = 1, B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev20'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_absorb_group'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ----------------------- PATTERN ((a b)+ c) @@ -907,7 +907,7 @@ WINDOW w AS ( -- Fixed-length group absorption: (A B B)+ C -- B B merged to B{2}; absorbable with fixed-length check -- step_size=3 (A + B + B); v % 7 cycle gives 2 iterations per match -CREATE VIEW rpr_ev20b AS +CREATE VIEW rpr_ev_ctx_absorb_fixedvar AS SELECT count(*) OVER w FROM generate_series(1, 70) AS s(v) WINDOW w AS ( @@ -916,7 +916,7 @@ WINDOW w AS ( PATTERN ((A B B)+ C) DEFINE A AS v % 7 IN (1, 4), B AS v % 7 IN (2, 3, 5, 6), C AS v % 7 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev20b'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_absorb_fixedvar'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------------- PATTERN ((a b b)+ c) @@ -947,7 +947,7 @@ WINDOW w AS ( -- Nested fixed-length group absorption: (A (B C){2} D)+ E -- step_size = 1 + (1+1)*2 + 1 = 6; v % 13 cycle gives 2 iterations + E -CREATE VIEW rpr_ev20c AS +CREATE VIEW rpr_ev_ctx_absorb_nested AS SELECT count(*) OVER w FROM generate_series(1, 65) AS s(v) WINDOW w AS ( @@ -958,7 +958,7 @@ WINDOW w AS ( C AS v % 13 IN (3, 5, 9, 11), D AS v % 13 IN (6, 12), E AS v % 13 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev20c'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_absorb_nested'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------------------- PATTERN ((a (b c){2} d)+ e) @@ -991,7 +991,7 @@ WINDOW w AS ( -- Doubly nested fixed-length group absorption: (A ((B C{3}){2} D){2} E)+ F -- step_size = 1 + ((1+3)*2+1)*2 + 1 = 20; v % 41 cycle gives 2 iterations + F -CREATE VIEW rpr_ev20d AS +CREATE VIEW rpr_ev_ctx_absorb_deep AS SELECT count(*) OVER w FROM generate_series(1, 82) AS s(v) WINDOW w AS ( @@ -1006,7 +1006,7 @@ WINDOW w AS ( E AS v % 41 IN (20, 40), F AS v % 41 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev20d'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_absorb_deep'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------------------------------- PATTERN ((a ((b c c c){2} d){2} e)+ f) @@ -1044,7 +1044,7 @@ WINDOW w AS ( -- 3-level END chain absorption: ((A (B C){2}){2})+ -- step_size = (1 + (1+1)*2) * 2 = 10; v % 21 cycle gives 2 iterations -- END chain: END(BC{2}) -> END(A..{2}) -> END(+, ABSORBABLE) -CREATE VIEW rpr_ev20e AS +CREATE VIEW rpr_ev_ctx_absorb_endchain AS SELECT count(*) OVER w FROM generate_series(1, 42) AS s(v) WINDOW w AS ( @@ -1055,7 +1055,7 @@ WINDOW w AS ( B AS v % 21 IN (2, 4, 7, 9, 12, 14, 17, 19), C AS v % 21 IN (3, 5, 8, 10, 13, 15, 18, 20) ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev20e'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_absorb_endchain'), E'\n')) AS line WHERE line ~ 'PATTERN'; line --------------------------------- PATTERN (((a (b c){2}){2})+) @@ -1090,7 +1090,7 @@ WINDOW w AS ( -- Match Length Statistics Tests -- ============================================================ -- Fixed length matches - all same length -CREATE VIEW rpr_ev21 AS +CREATE VIEW rpr_ev_mlen_fixed AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -1101,7 +1101,7 @@ WINDOW w AS ( A AS cat = 'A', B AS cat = 'B', C AS cat = 'C', D AS cat = 'D', E AS cat = 'E' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev21'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_mlen_fixed'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------------ PATTERN (a b c d e) @@ -1133,7 +1133,7 @@ WINDOW w AS ( (9 rows) -- Variable length matches - min/max/avg differ -CREATE VIEW rpr_ev22 AS +CREATE VIEW rpr_ev_mlen_variable AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -1142,7 +1142,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 10 <> 0, B AS v % 10 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev22'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_mlen_variable'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -1172,7 +1172,7 @@ WINDOW w AS ( (9 rows) -- Very long matches -CREATE VIEW rpr_ev23 AS +CREATE VIEW rpr_ev_mlen_long AS SELECT count(*) OVER w FROM generate_series(1, 200) AS s(v) WINDOW w AS ( @@ -1181,7 +1181,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v <= 195, B AS v > 195 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev23'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_mlen_long'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -1211,7 +1211,7 @@ WINDOW w AS ( (9 rows) -- Uniform match length with mismatches from gap rows (v%20 = 11..15) -CREATE VIEW rpr_ev24 AS +CREATE VIEW rpr_ev_mlen_with_mismatch AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -1222,7 +1222,7 @@ WINDOW w AS ( A AS (v % 20 <> 0) AND (v % 20 <= 10 OR v % 20 > 15), B AS v % 20 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev24'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_mlen_with_mismatch'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -1258,7 +1258,7 @@ WINDOW w AS ( -- ============================================================ -- Pattern with complete match every cycle: 0 mismatched -- A(1,2,3) B(4,5) C(6) repeats perfectly; X rows are pruned, not mismatched -CREATE VIEW rpr_ev25 AS +CREATE VIEW rpr_ev_mlen_no_mismatch AS SELECT count(*) OVER w FROM ( SELECT v, @@ -1274,7 +1274,7 @@ WINDOW w AS ( PATTERN (A+ B+ C) DEFINE A AS cat = 'A', B AS cat = 'B', C AS cat = 'C' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev25'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_mlen_no_mismatch'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ---------------------- PATTERN (a+ b+ c) @@ -1311,7 +1311,7 @@ WINDOW w AS ( (9 rows) -- Long partial matches that fail -CREATE VIEW rpr_ev26 AS +CREATE VIEW rpr_ev_mlen_long_partial AS SELECT count(*) OVER w FROM ( SELECT i AS v, @@ -1332,7 +1332,7 @@ WINDOW w AS ( PATTERN (A+ B+ C) DEFINE A AS cat = 'A', B AS cat = 'B', C AS cat = 'C' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev26'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_mlen_long_partial'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ---------------------- PATTERN (a+ b+ c) @@ -1377,7 +1377,7 @@ WINDOW w AS ( -- JSON Format Tests -- ============================================================ -- JSON format output with all statistics -CREATE VIEW rpr_ev27 AS +CREATE VIEW rpr_ev_json_basic AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -1386,7 +1386,7 @@ WINDOW w AS ( PATTERN (A+ B+) DEFINE A AS v % 3 = 1, B AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev27'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_json_basic'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------- PATTERN (a+ b+) @@ -1454,7 +1454,7 @@ WINDOW w AS ( (1 row) -- JSON format with match length statistics -CREATE VIEW rpr_ev28 AS +CREATE VIEW rpr_ev_json_matchlen AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -1463,7 +1463,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 10 <> 0, B AS v % 10 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev28'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_json_matchlen'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -1535,7 +1535,7 @@ WINDOW w AS ( -- JSON format with mismatch statistics -- Pattern A B C expects 1,2,3 but gets 1,2,4 twice causing mismatches -CREATE VIEW rpr_ev29 AS +CREATE VIEW rpr_ev_json_mismatch AS SELECT count(*) OVER w FROM (VALUES (1),(2),(4), (1),(2),(4), (1),(2),(3)) AS t(v) WINDOW w AS ( @@ -1544,7 +1544,7 @@ WINDOW w AS ( PATTERN (A B C) DEFINE A AS v = 1, B AS v = 2, C AS v = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev29'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_json_mismatch'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------- PATTERN (a b c) @@ -1615,7 +1615,7 @@ WINDOW w AS ( -- JSON format with skipped context statistics -- Alternation pattern with SKIP PAST LAST ROW causes many contexts to be skipped -CREATE VIEW rpr_ev30 AS +CREATE VIEW rpr_ev_json_skip AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -1624,7 +1624,7 @@ WINDOW w AS ( PATTERN ((A | B) (A | B) (A | B) (A | B) (A | B) (A | B) (A | B) (A | B)) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev30'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_json_skip'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------------------------------------------------------------------ PATTERN ((a | b) (a | b) (a | b) (a | b) (a | b) (a | b) (a | b) (a | b)) @@ -1698,7 +1698,7 @@ WINDOW w AS ( -- XML Format Tests -- ============================================================ -- XML format output -CREATE VIEW rpr_ev31 AS +CREATE VIEW rpr_ev_xml_basic AS SELECT count(*) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -1707,7 +1707,7 @@ WINDOW w AS ( PATTERN (A B) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev31'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_xml_basic'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------ PATTERN (a b) @@ -1778,7 +1778,7 @@ WINDOW w AS ( -- Multiple Partitions Tests -- ============================================================ -- Statistics across multiple partitions -CREATE VIEW rpr_ev32 AS +CREATE VIEW rpr_ev_part_multi AS SELECT count(*) OVER w FROM ( SELECT p, v @@ -1792,7 +1792,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev32'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_part_multi'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -1832,7 +1832,7 @@ WINDOW w AS ( (14 rows) -- Different pattern behavior per partition -CREATE VIEW rpr_ev33 AS +CREATE VIEW rpr_ev_part_diff AS SELECT count(*) OVER w FROM ( SELECT @@ -1847,7 +1847,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS val < 5, B AS val >= 5 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev33'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_part_diff'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -1889,7 +1889,7 @@ WINDOW w AS ( -- Edge Cases -- ============================================================ -- Empty result set -CREATE VIEW rpr_ev34 AS +CREATE VIEW rpr_ev_edge_empty AS SELECT count(*) OVER w FROM generate_series(1, 0) AS s(v) WINDOW w AS ( @@ -1898,7 +1898,7 @@ WINDOW w AS ( PATTERN (A B) DEFINE A AS v = 1, B AS v = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev34'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_edge_empty'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------ PATTERN (a b) @@ -1923,7 +1923,7 @@ WINDOW w AS ( (4 rows) -- Single row -CREATE VIEW rpr_ev35 AS +CREATE VIEW rpr_ev_edge_single_row AS SELECT count(*) OVER w FROM generate_series(1, 1) AS s(v) WINDOW w AS ( @@ -1932,7 +1932,7 @@ WINDOW w AS ( PATTERN (A) DEFINE A AS TRUE ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev35'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_edge_single_row'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ---------------- PATTERN (a) @@ -1961,7 +1961,7 @@ WINDOW w AS ( (8 rows) -- Pattern longer than data -CREATE VIEW rpr_ev36 AS +CREATE VIEW rpr_ev_edge_pattern_longer AS SELECT count(*) OVER w FROM generate_series(1, 5) AS s(v) WINDOW w AS ( @@ -1972,7 +1972,7 @@ WINDOW w AS ( A AS v = 1, B AS v = 2, C AS v = 3, D AS v = 4, E AS v = 5, F AS v = 6, G AS v = 7, H AS v = 8, I AS v = 9, J AS v = 10 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev36'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_edge_pattern_longer'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ---------------------------------- PATTERN (a b c d e f g h i j) @@ -2003,7 +2003,7 @@ WINDOW w AS ( (8 rows) -- All rows match as single match -CREATE VIEW rpr_ev37 AS +CREATE VIEW rpr_ev_edge_single_match AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -2012,7 +2012,7 @@ WINDOW w AS ( PATTERN (A+) DEFINE A AS TRUE ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev37'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_edge_single_match'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ----------------- PATTERN (a+) @@ -2045,7 +2045,7 @@ WINDOW w AS ( -- Complex Pattern Tests -- ============================================================ -- Nested groups -CREATE VIEW rpr_ev38 AS +CREATE VIEW rpr_ev_cpx_nested AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -2054,7 +2054,7 @@ WINDOW w AS ( PATTERN (((A B) C)+) DEFINE A AS v % 3 = 1, B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev38'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_cpx_nested'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------------- PATTERN (((a b) c)+) @@ -2084,7 +2084,7 @@ WINDOW w AS ( (9 rows) -- Multiple alternations -CREATE VIEW rpr_ev39 AS +CREATE VIEW rpr_ev_cpx_multi_alt AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -2095,7 +2095,7 @@ WINDOW w AS ( A AS cat = 'A', B AS cat = 'B', C AS cat = 'C', D AS cat = 'D', E AS cat = 'E' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev39'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_cpx_multi_alt'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ---------------------------------- PATTERN ((a | b) (c | d | e)) @@ -2127,7 +2127,7 @@ WINDOW w AS ( (9 rows) -- Optional elements -CREATE VIEW rpr_ev40 AS +CREATE VIEW rpr_ev_cpx_optional AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -2136,7 +2136,7 @@ WINDOW w AS ( PATTERN (A B? C) DEFINE A AS v % 4 = 1, B AS v % 4 = 2, C AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev40'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_cpx_optional'), E'\n')) AS line WHERE line ~ 'PATTERN'; line --------------------- PATTERN (a b? c) @@ -2166,7 +2166,7 @@ WINDOW w AS ( (9 rows) -- Bounded quantifiers -CREATE VIEW rpr_ev41 AS +CREATE VIEW rpr_ev_cpx_bounded AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -2175,7 +2175,7 @@ WINDOW w AS ( PATTERN (A{2,5} B) DEFINE A AS v % 10 <> 0, B AS v % 10 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev41'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_cpx_bounded'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ----------------------- PATTERN (a{2,5} b) @@ -2205,7 +2205,7 @@ WINDOW w AS ( (9 rows) -- Star quantifier -CREATE VIEW rpr_ev42 AS +CREATE VIEW rpr_ev_cpx_star AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -2214,7 +2214,7 @@ WINDOW w AS ( PATTERN (A B* C) DEFINE A AS v % 10 = 1, B AS v % 10 IN (2,3,4,5,6,7,8), C AS v % 10 = 9 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev42'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_cpx_star'), E'\n')) AS line WHERE line ~ 'PATTERN'; line --------------------- PATTERN (a b* c) @@ -2247,7 +2247,7 @@ WINDOW w AS ( -- Real-world Pattern Examples -- ============================================================ -- Stock price pattern - V-shape (down then up) -CREATE VIEW rpr_ev43 AS +CREATE VIEW rpr_ev_real_vshape AS SELECT count(*) OVER w FROM rpr_nfa_complex WINDOW w AS ( @@ -2256,7 +2256,7 @@ WINDOW w AS ( PATTERN (D+ U+) DEFINE D AS trend = 'D', U AS trend = 'U' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev43'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_real_vshape'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------- PATTERN (d+ u+) @@ -2286,7 +2286,7 @@ WINDOW w AS ( (9 rows) -- Stock price pattern - peak (up, stable, down) -CREATE VIEW rpr_ev44 AS +CREATE VIEW rpr_ev_real_peak AS SELECT count(*) OVER w FROM rpr_nfa_complex WINDOW w AS ( @@ -2295,7 +2295,7 @@ WINDOW w AS ( PATTERN (U+ S* D+) DEFINE U AS trend = 'U', S AS trend = 'S', D AS trend = 'D' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev44'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_real_peak'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ----------------------- PATTERN (u+ s* d+) @@ -2325,7 +2325,7 @@ WINDOW w AS ( (9 rows) -- Consecutive increasing values (using PREV) -CREATE VIEW rpr_ev45 AS +CREATE VIEW rpr_ev_real_increasing AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -2334,7 +2334,7 @@ WINDOW w AS ( PATTERN (A{3,}) DEFINE A AS v > PREV(v) OR PREV(v) IS NULL ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev45'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_real_increasing'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------- PATTERN (a{3,}) @@ -2367,7 +2367,7 @@ WINDOW w AS ( -- Performance-oriented Tests -- ============================================================ -- Large dataset with simple pattern -CREATE VIEW rpr_ev46 AS +CREATE VIEW rpr_ev_perf_large_simple AS SELECT count(*) OVER w FROM generate_series(1, 1000) AS s(v) WINDOW w AS ( @@ -2376,7 +2376,7 @@ WINDOW w AS ( PATTERN (A B) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev46'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_perf_large_simple'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------ PATTERN (a b) @@ -2406,7 +2406,7 @@ WINDOW w AS ( (9 rows) -- Large dataset with absorption -CREATE VIEW rpr_ev47 AS +CREATE VIEW rpr_ev_perf_large_absorb AS SELECT count(*) OVER w FROM generate_series(1, 1000) AS s(v) WINDOW w AS ( @@ -2415,7 +2415,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 100 <> 0, B AS v % 100 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev47'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_perf_large_absorb'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -2445,7 +2445,7 @@ WINDOW w AS ( (9 rows) -- High state merge ratio -CREATE VIEW rpr_ev48 AS +CREATE VIEW rpr_ev_perf_high_merge AS SELECT count(*) OVER w FROM generate_series(1, 500) AS s(v) WINDOW w AS ( @@ -2454,7 +2454,7 @@ WINDOW w AS ( PATTERN ((A | B)+ C) DEFINE A AS v % 3 = 1, B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev48'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_perf_high_merge'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------------- PATTERN ((a | b)+ c) @@ -2487,7 +2487,7 @@ WINDOW w AS ( -- INITIAL vs no INITIAL comparison -- ============================================================ -- With INITIAL keyword -CREATE VIEW rpr_ev49 AS +CREATE VIEW rpr_ev_initial_with AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -2497,7 +2497,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev49'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_initial_with'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -2528,7 +2528,7 @@ WINDOW w AS ( (9 rows) -- Without INITIAL keyword (same behavior currently) -CREATE VIEW rpr_ev50 AS +CREATE VIEW rpr_ev_initial_without AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -2537,7 +2537,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev50'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_initial_without'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -2570,7 +2570,7 @@ WINDOW w AS ( -- Quantifier Variations -- ============================================================ -- Plus quantifier -CREATE VIEW rpr_ev51 AS +CREATE VIEW rpr_ev_quant_plus AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -2579,7 +2579,7 @@ WINDOW w AS ( PATTERN (A+) DEFINE A AS v % 4 <> 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev51'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_quant_plus'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ----------------- PATTERN (a+) @@ -2609,7 +2609,7 @@ WINDOW w AS ( (9 rows) -- Star quantifier (zero or more) -CREATE VIEW rpr_ev52 AS +CREATE VIEW rpr_ev_quant_star AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -2618,7 +2618,7 @@ WINDOW w AS ( PATTERN (A* B) DEFINE A AS v % 4 IN (1, 2), B AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev52'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_quant_star'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a* b) @@ -2648,7 +2648,7 @@ WINDOW w AS ( (9 rows) -- Question mark (zero or one) -CREATE VIEW rpr_ev53 AS +CREATE VIEW rpr_ev_quant_question AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -2657,7 +2657,7 @@ WINDOW w AS ( PATTERN (A? B C) DEFINE A AS v % 4 = 1, B AS v % 4 = 2, C AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev53'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_quant_question'), E'\n')) AS line WHERE line ~ 'PATTERN'; line --------------------- PATTERN (a? b c) @@ -2687,7 +2687,7 @@ WINDOW w AS ( (9 rows) -- Exact count {n} -CREATE VIEW rpr_ev54 AS +CREATE VIEW rpr_ev_quant_exact AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -2696,7 +2696,7 @@ WINDOW w AS ( PATTERN (A{3} B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev54'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_quant_exact'), E'\n')) AS line WHERE line ~ 'PATTERN'; line --------------------- PATTERN (a{3} b) @@ -2726,7 +2726,7 @@ WINDOW w AS ( (9 rows) -- Range {n,m} -CREATE VIEW rpr_ev55 AS +CREATE VIEW rpr_ev_quant_range AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -2735,7 +2735,7 @@ WINDOW w AS ( PATTERN (A{2,4} B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev55'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_quant_range'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ----------------------- PATTERN (a{2,4} b) @@ -2765,7 +2765,7 @@ WINDOW w AS ( (9 rows) -- At least {n,} -CREATE VIEW rpr_ev56 AS +CREATE VIEW rpr_ev_quant_atleast AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -2774,7 +2774,7 @@ WINDOW w AS ( PATTERN (A{3,} B) DEFINE A AS v % 10 <> 0, B AS v % 10 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev56'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_quant_atleast'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ---------------------- PATTERN (a{3,} b) @@ -2808,7 +2808,7 @@ WINDOW w AS ( -- ============================================================ -- Verify state count accuracy -- Pattern A+ B with 20 rows should show predictable state behavior -CREATE VIEW rpr_ev57 AS +CREATE VIEW rpr_ev_reg_state_count AS SELECT count(*) OVER w FROM generate_series(1, 20) AS s(v) WINDOW w AS ( @@ -2817,7 +2817,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev57'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_reg_state_count'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -2847,7 +2847,7 @@ WINDOW w AS ( (9 rows) -- Verify context count with known absorption -CREATE VIEW rpr_ev58 AS +CREATE VIEW rpr_ev_reg_ctx_absorb AS SELECT count(*) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -2856,7 +2856,7 @@ WINDOW w AS ( PATTERN (A+ B C) DEFINE A AS v % 10 IN (1,2,3,4,5,6,7), B AS v % 10 = 8, C AS v % 10 = 9 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev58'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_reg_ctx_absorb'), E'\n')) AS line WHERE line ~ 'PATTERN'; line --------------------- PATTERN (a+ b c) @@ -2886,7 +2886,7 @@ WINDOW w AS ( (9 rows) -- Verify match length with fixed-length pattern -CREATE VIEW rpr_ev59 AS +CREATE VIEW rpr_ev_reg_matchlen AS SELECT count(*) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -2895,7 +2895,7 @@ WINDOW w AS ( PATTERN (A B C) DEFINE A AS v % 3 = 1, B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev59'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_reg_matchlen'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------- PATTERN (a b c) @@ -2928,7 +2928,7 @@ WINDOW w AS ( -- Alternation Pattern Tests -- ============================================================ -- Simple alternation -CREATE VIEW rpr_ev60 AS +CREATE VIEW rpr_ev_alt_simple AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -2937,7 +2937,7 @@ WINDOW w AS ( PATTERN ((A | B) C) DEFINE A AS cat = 'A', B AS cat = 'B', C AS cat = 'C' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev60'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_simple'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------------ PATTERN ((a | b) c) @@ -2967,7 +2967,7 @@ WINDOW w AS ( (9 rows) -- Multiple items in alternation -CREATE VIEW rpr_ev61 AS +CREATE VIEW rpr_ev_alt_multi_item AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -2978,7 +2978,7 @@ WINDOW w AS ( A AS cat = 'A', B AS cat = 'B', C AS cat = 'C', D AS cat = 'D', E AS cat = 'E' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev61'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_multi_item'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------------------- PATTERN ((a | b | c | d) e) @@ -3010,7 +3010,7 @@ WINDOW w AS ( (9 rows) -- Alternation with quantifiers -CREATE VIEW rpr_ev62 AS +CREATE VIEW rpr_ev_alt_with_quant AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -3019,7 +3019,7 @@ WINDOW w AS ( PATTERN ((A | B)+ C) DEFINE A AS v % 3 = 1, B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev62'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_with_quant'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------------- PATTERN ((a | b)+ c) @@ -3049,7 +3049,7 @@ WINDOW w AS ( (9 rows) -- Multiple alternatives (4+) -CREATE VIEW rpr_ev63 AS +CREATE VIEW rpr_ev_alt_four_plus AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -3057,7 +3057,7 @@ WINDOW w AS ( PATTERN (A | B | C | D | E) DEFINE A AS v % 5 = 0, B AS v % 5 = 1, C AS v % 5 = 2, D AS v % 5 = 3, E AS v % 5 = 4 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev63'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_four_plus'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------------------- PATTERN (a | b | c | d | e) @@ -3085,7 +3085,7 @@ WINDOW w AS ( (8 rows) -- Alternation at start -CREATE VIEW rpr_ev64 AS +CREATE VIEW rpr_ev_alt_at_start AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -3093,7 +3093,7 @@ WINDOW w AS ( PATTERN ((A | B) C D) DEFINE A AS v % 4 = 0, B AS v % 4 = 1, C AS v % 4 = 2, D AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev64'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_at_start'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------------- PATTERN ((a | b) c d) @@ -3122,7 +3122,7 @@ WINDOW w AS ( (9 rows) -- Multiple sequential alternations -CREATE VIEW rpr_ev65 AS +CREATE VIEW rpr_ev_alt_sequential AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -3130,7 +3130,7 @@ WINDOW w AS ( PATTERN ((A | B) C (D | E) F) DEFINE A AS v % 6 = 0, B AS v % 6 = 1, C AS v % 6 = 2, D AS v % 6 = 3, E AS v % 6 = 4, F AS v % 6 = 5 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev65'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_sequential'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ---------------------------------- PATTERN ((a | b) c (d | e) f) @@ -3158,7 +3158,7 @@ WINDOW w AS ( (8 rows) -- Quantified alternatives -CREATE VIEW rpr_ev66 AS +CREATE VIEW rpr_ev_alt_quantified AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -3166,7 +3166,7 @@ WINDOW w AS ( PATTERN ((A+ | B+) C) DEFINE A AS v % 3 = 0, B AS v % 3 = 1, C AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev66'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_quantified'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------------- PATTERN ((a+ | b+) c) @@ -3195,7 +3195,7 @@ WINDOW w AS ( (9 rows) -- Alternation at end -CREATE VIEW rpr_ev67 AS +CREATE VIEW rpr_ev_alt_at_end AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -3203,7 +3203,7 @@ WINDOW w AS ( PATTERN (A B (C | D)) DEFINE A AS v % 4 = 0, B AS v % 4 = 1, C AS v % 4 = 2, D AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev67'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_at_end'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------------- PATTERN (a b (c | d)) @@ -3233,7 +3233,7 @@ WINDOW w AS ( -- Nested ALT at start of branch inside outer ALT -- Pattern: (A ((B | C) D | E)) - preceding VAR + inner ALT as first branch element -CREATE VIEW rpr_ev68 AS +CREATE VIEW rpr_ev_alt_nested_start AS SELECT count(*) OVER w FROM generate_series(1, 20) AS s(v) WINDOW w AS ( @@ -3241,7 +3241,7 @@ WINDOW w AS ( PATTERN (A ((B | C) D | E)) DEFINE A AS v % 5 = 0, B AS v % 5 = 1, C AS v % 5 = 2, D AS v % 5 = 3, E AS v % 5 = 4 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev68'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_nested_start'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------------------- PATTERN (a ((b | c) d | e)) @@ -3270,7 +3270,7 @@ WINDOW w AS ( -- Nested ALT at end of branch inside outer ALT -- Pattern: (C (A | B) | D) - inner ALT is last element in outer branch -CREATE VIEW rpr_ev69 AS +CREATE VIEW rpr_ev_alt_nested_end AS SELECT count(*) OVER w FROM generate_series(1, 20) AS s(v) WINDOW w AS ( @@ -3278,7 +3278,7 @@ WINDOW w AS ( PATTERN (C (A | B) | D) DEFINE A AS v % 4 = 0, B AS v % 4 = 1, C AS v % 4 = 2, D AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev69'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_nested_end'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ---------------------------- PATTERN (c (a | b) | d) @@ -3309,7 +3309,7 @@ WINDOW w AS ( -- Group Pattern Tests -- ============================================================ -- Simple group -CREATE VIEW rpr_ev70 AS +CREATE VIEW rpr_ev_grp_simple AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -3318,7 +3318,7 @@ WINDOW w AS ( PATTERN ((A B)+) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev70'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_simple'), E'\n')) AS line WHERE line ~ 'PATTERN'; line --------------------- PATTERN ((a b)+) @@ -3348,7 +3348,7 @@ WINDOW w AS ( (9 rows) -- Group with bounded quantifier -CREATE VIEW rpr_ev71 AS +CREATE VIEW rpr_ev_grp_bounded AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -3357,7 +3357,7 @@ WINDOW w AS ( PATTERN ((A B){2,4}) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev71'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_bounded'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------------- PATTERN ((a b){2,4}) @@ -3387,7 +3387,7 @@ WINDOW w AS ( (9 rows) -- Nested groups -CREATE VIEW rpr_ev72 AS +CREATE VIEW rpr_ev_grp_nested AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -3396,7 +3396,7 @@ WINDOW w AS ( PATTERN (((A B){2})+) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev72'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_nested'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------------- PATTERN (((a b){2})+) @@ -3426,7 +3426,7 @@ WINDOW w AS ( (9 rows) -- Deep nesting (3+ levels) -CREATE VIEW rpr_ev73 AS +CREATE VIEW rpr_ev_grp_deep AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -3434,7 +3434,7 @@ WINDOW w AS ( PATTERN ((((A | B)+)+)+) DEFINE A AS v % 2 = 0, B AS v % 2 = 1 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev73'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_deep'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ----------------------------- PATTERN ((((a | b)+)+)+) @@ -3463,7 +3463,7 @@ WINDOW w AS ( (9 rows) -- Bounded quantifier on alternation -CREATE VIEW rpr_ev74 AS +CREATE VIEW rpr_ev_grp_bounded_alt AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -3471,7 +3471,7 @@ WINDOW w AS ( PATTERN ((A | B){2,3} C) DEFINE A AS v % 3 = 0, B AS v % 3 = 1, C AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev74'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_bounded_alt'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ----------------------------- PATTERN ((a | b){2,3} c) @@ -3500,7 +3500,7 @@ WINDOW w AS ( (9 rows) -- Nested groups with quantifiers -CREATE VIEW rpr_ev75 AS +CREATE VIEW rpr_ev_grp_nested_quant AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -3508,7 +3508,7 @@ WINDOW w AS ( PATTERN (((A B)+ C)*) DEFINE A AS v % 3 = 0, B AS v % 3 = 1, C AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev75'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_nested_quant'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------------- PATTERN (((a b)+ c)*) @@ -3537,7 +3537,7 @@ WINDOW w AS ( (9 rows) -- Partial nested quantification -CREATE VIEW rpr_ev76 AS +CREATE VIEW rpr_ev_grp_partial_quant AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -3545,7 +3545,7 @@ WINDOW w AS ( PATTERN ((A (B C)+)*) DEFINE A AS v % 3 = 0, B AS v % 3 = 1, C AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev76'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_partial_quant'), E'\n')) AS line WHERE line ~ 'PATTERN'; line -------------------------- PATTERN ((a (b c)+)*) @@ -3577,7 +3577,7 @@ WINDOW w AS ( -- Window Function Combinations -- ============================================================ -- count(*) with pattern -CREATE VIEW rpr_ev77 AS +CREATE VIEW rpr_ev_wfn_count AS SELECT count(*) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -3586,7 +3586,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev77'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_wfn_count'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -3616,7 +3616,7 @@ WINDOW w AS ( (9 rows) -- first_value with pattern -CREATE VIEW rpr_ev78 AS +CREATE VIEW rpr_ev_wfn_first_value AS SELECT first_value(v) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -3625,7 +3625,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev78'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_wfn_first_value'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -3655,7 +3655,7 @@ WINDOW w AS ( (9 rows) -- last_value with pattern -CREATE VIEW rpr_ev79 AS +CREATE VIEW rpr_ev_wfn_last_value AS SELECT last_value(v) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -3664,7 +3664,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev79'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_wfn_last_value'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -3694,7 +3694,7 @@ WINDOW w AS ( (9 rows) -- Multiple window functions -CREATE VIEW rpr_ev80 AS +CREATE VIEW rpr_ev_wfn_multi AS SELECT count(*) OVER w, first_value(v) OVER w, @@ -3706,7 +3706,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev80'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_wfn_multi'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -3742,7 +3742,7 @@ WINDOW w AS ( -- DEFINE Expression Variations -- ============================================================ -- Complex boolean expressions -CREATE VIEW rpr_ev81 AS +CREATE VIEW rpr_ev_def_complex_bool AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -3753,7 +3753,7 @@ WINDOW w AS ( A AS (v % 5 <> 0) AND (v % 3 <> 0), B AS (v % 5 = 0) OR (v % 3 = 0) ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev81'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_def_complex_bool'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -3785,7 +3785,7 @@ WINDOW w AS ( (9 rows) -- Using PREV function -CREATE VIEW rpr_ev82 AS +CREATE VIEW rpr_ev_def_prev AS SELECT count(*) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -3797,7 +3797,7 @@ WINDOW w AS ( U AS v > PREV(v), D AS v < PREV(v) ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev82'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_def_prev'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ---------------------- PATTERN (s u+ d+) @@ -3829,7 +3829,7 @@ WINDOW w AS ( (8 rows) -- Using NULL comparisons -CREATE VIEW rpr_ev83 AS +CREATE VIEW rpr_ev_def_null AS SELECT count(*) OVER w FROM ( SELECT CASE WHEN v % 5 = 0 THEN NULL ELSE v END AS v @@ -3841,7 +3841,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v IS NOT NULL, B AS v IS NULL ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev83'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_def_null'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------- PATTERN (a+ b) @@ -3877,7 +3877,7 @@ WINDOW w AS ( -- Large Scale Statistics Verification -- ============================================================ -- 500 rows - verify statistics scale correctly -CREATE VIEW rpr_ev84 AS +CREATE VIEW rpr_ev_scale_500rows AS SELECT count(*) OVER w FROM generate_series(1, 500) AS s(v) WINDOW w AS ( @@ -3886,7 +3886,7 @@ WINDOW w AS ( PATTERN (A+ B C) DEFINE A AS v % 10 < 7, B AS v % 10 = 7, C AS v % 10 = 8 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev84'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_scale_500rows'), E'\n')) AS line WHERE line ~ 'PATTERN'; line --------------------- PATTERN (a+ b c) @@ -3916,7 +3916,7 @@ WINDOW w AS ( (9 rows) -- High match count scenario -CREATE VIEW rpr_ev85 AS +CREATE VIEW rpr_ev_scale_high_match AS SELECT count(*) OVER w FROM generate_series(1, 500) AS s(v) WINDOW w AS ( @@ -3925,7 +3925,7 @@ WINDOW w AS ( PATTERN (A B) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev85'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_scale_high_match'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------ PATTERN (a b) @@ -3955,7 +3955,7 @@ WINDOW w AS ( (9 rows) -- High skip count scenario -CREATE VIEW rpr_ev86 AS +CREATE VIEW rpr_ev_scale_high_skip AS SELECT count(*) OVER w FROM generate_series(1, 500) AS s(v) WINDOW w AS ( @@ -3969,7 +3969,7 @@ WINDOW w AS ( D AS v % 100 = 4, E AS v % 100 = 5 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev86'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_scale_high_skip'), E'\n')) AS line WHERE line ~ 'PATTERN'; line ------------------------ PATTERN (a b c d e) @@ -4013,17 +4013,17 @@ WINDOW w AS ( -- Test with row_number() as representative case. -- -- Without RPR: row_number() frame is optimized to ROWS UNBOUNDED PRECEDING -CREATE VIEW rpr_ev87 AS +CREATE VIEW rpr_ev_opt_no_rpr AS SELECT row_number() OVER w FROM generate_series(1, 10) AS s(v) WINDOW w AS ( ORDER BY v ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ); -EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev87; +EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev_opt_no_rpr; QUERY PLAN -------------------------------------------------------------- - Subquery Scan on rpr_ev87 + Subquery Scan on rpr_ev_opt_no_rpr -> WindowAgg Window: w AS (ORDER BY s.v ROWS UNBOUNDED PRECEDING) -> Sort @@ -4032,7 +4032,7 @@ EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev87; (6 rows) -- With RPR: frame must remain ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING -CREATE VIEW rpr_ev88 AS +CREATE VIEW rpr_ev_opt_with_rpr AS SELECT row_number() OVER w FROM generate_series(1, 10) AS s(v) WINDOW w AS ( @@ -4043,10 +4043,10 @@ WINDOW w AS ( DEFINE B AS v > PREV(v) ); -EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev88; +EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev_opt_with_rpr; QUERY PLAN -------------------------------------------------------------------------------------- - Subquery Scan on rpr_ev88 + Subquery Scan on rpr_ev_opt_with_rpr -> WindowAgg Window: w AS (ORDER BY s.v ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) Pattern: a b+ @@ -4059,7 +4059,7 @@ EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev88; -- Planner optimization: non-RPR and RPR windows that share the same base frame -- after frame optimization are kept as separate WindowAgg nodes. -- -CREATE VIEW rpr_ev89 AS +CREATE VIEW rpr_ev_opt_mixed AS SELECT row_number() OVER w_normal AS rn_normal, row_number() OVER w_rpr AS rn_rpr @@ -4072,10 +4072,10 @@ WINDOW PATTERN (A+) DEFINE A AS v > 1 ); -EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev89; +EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev_opt_mixed; QUERY PLAN ------------------------------------------------------------------------------------------ - Subquery Scan on rpr_ev89 + Subquery Scan on rpr_ev_opt_mixed -> WindowAgg Window: w_rpr AS (ORDER BY s.v ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) Pattern: a+" diff --git a/src/test/regress/sql/rpr_explain.sql b/src/test/regress/sql/rpr_explain.sql index 237f0366631..65a775fdad9 100644 --- a/src/test/regress/sql/rpr_explain.sql +++ b/src/test/regress/sql/rpr_explain.sql @@ -118,7 +118,7 @@ VALUES -- ============================================================ -- Simple pattern - should show basic statistics -CREATE VIEW rpr_ev01 AS +CREATE VIEW rpr_ev_basic_simple AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -127,7 +127,7 @@ WINDOW w AS ( PATTERN (A B) DEFINE A AS cat = 'A', B AS cat = 'B' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev01'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_basic_simple'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -140,7 +140,7 @@ WINDOW w AS ( )'); -- Pattern with no matches - 0 matched -CREATE VIEW rpr_ev02 AS +CREATE VIEW rpr_ev_basic_nomatch AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -149,7 +149,7 @@ WINDOW w AS ( PATTERN (X Y Z) DEFINE X AS cat = 'X', Y AS cat = 'Y', Z AS cat = 'Z' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev02'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_basic_nomatch'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -162,7 +162,7 @@ WINDOW w AS ( );'); -- Pattern matching every row - high match count -CREATE VIEW rpr_ev03 AS +CREATE VIEW rpr_ev_basic_allrows AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -171,7 +171,7 @@ WINDOW w AS ( PATTERN (R) DEFINE R AS TRUE ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev03'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_basic_allrows'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -185,7 +185,7 @@ WINDOW w AS ( -- Regression test: Space before parenthesis in pattern deparse -- Verifies that "A (B | C)" correctly outputs as "a (b | c)" with space -CREATE VIEW rpr_ev04 AS +CREATE VIEW rpr_ev_basic_deparse_space AS SELECT count(*) OVER w FROM generate_series(1, 20) AS s(v) WINDOW w AS ( @@ -193,7 +193,7 @@ WINDOW w AS ( PATTERN (A (B | C)) DEFINE A AS v % 3 = 1, B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev04'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_basic_deparse_space'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -207,7 +207,7 @@ WINDOW w AS ( -- Regression test: Sequential alternations at same depth -- Verifies that "((B | C) (D | E))" correctly outputs as "(b | c) (d | e)" -- Previously failed due to missing parentheses on ALT depth decrease -CREATE VIEW rpr_ev05 AS +CREATE VIEW rpr_ev_basic_deparse_seqalt AS SELECT count(*) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -215,7 +215,7 @@ WINDOW w AS ( PATTERN (A ((B | C) (D | E))*) DEFINE A AS v % 5 = 1, B AS v % 5 = 2, C AS v % 5 = 3, D AS v % 5 = 4, E AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev05'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_basic_deparse_seqalt'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -231,7 +231,7 @@ WINDOW w AS ( -- ============================================================ -- Simple quantifier pattern - A+ with short matches (no merging) -CREATE VIEW rpr_ev06 AS +CREATE VIEW rpr_ev_state_simple_quant AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -240,7 +240,7 @@ WINDOW w AS ( PATTERN (A+) DEFINE A AS v % 2 = 1 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev06'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_simple_quant'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -253,7 +253,7 @@ WINDOW w AS ( );'); -- Alternation pattern - multiple state branches -CREATE VIEW rpr_ev07 AS +CREATE VIEW rpr_ev_state_alt AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -264,7 +264,7 @@ WINDOW w AS ( A AS cat = 'A', B AS cat = 'B', C AS cat = 'C', D AS cat = 'D', E AS cat = 'E' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev07'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_alt'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -279,7 +279,7 @@ WINDOW w AS ( );'); -- Complex pattern with high state count -CREATE VIEW rpr_ev08 AS +CREATE VIEW rpr_ev_state_complex AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -291,7 +291,7 @@ WINDOW w AS ( B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev08'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_complex'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -307,7 +307,7 @@ WINDOW w AS ( );'); -- Grouped pattern with quantifier - state count with grouping -CREATE VIEW rpr_ev09 AS +CREATE VIEW rpr_ev_state_group_quant AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -316,7 +316,7 @@ WINDOW w AS ( PATTERN ((A B)+) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev09'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_group_quant'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -330,7 +330,7 @@ WINDOW w AS ( -- State explosion pattern - many alternations -- Pattern (A|B)(A|B)(A|B)(A|B) can create many parallel states -CREATE VIEW rpr_ev10 AS +CREATE VIEW rpr_ev_state_explosion AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -339,7 +339,7 @@ WINDOW w AS ( PATTERN ((A | B) (A | B) (A | B) (A | B) (A | B) (A | B) (A | B) (A | B)) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev10'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_explosion'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -353,7 +353,7 @@ WINDOW w AS ( -- Consecutive ALT merge followed by different ALT -- Tests mergeConsecutiveAlts flush on ALT change: (A|B){2} (C|D) -CREATE VIEW rpr_ev11 AS +CREATE VIEW rpr_ev_state_alt_merge_alt AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -362,7 +362,7 @@ WINDOW w AS ( PATTERN ((A | B) (A | B) (C | D)) DEFINE A AS v % 4 = 0, B AS v % 4 = 1, C AS v % 4 = 2, D AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev11'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_alt_merge_alt'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -376,7 +376,7 @@ WINDOW w AS ( -- Consecutive ALT merge followed by non-ALT element -- Tests mergeConsecutiveAlts flush on non-ALT: (A|B){2} c -CREATE VIEW rpr_ev12 AS +CREATE VIEW rpr_ev_state_alt_merge_nonalt AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -385,7 +385,7 @@ WINDOW w AS ( PATTERN ((A | B) (A | B) C) DEFINE A AS v % 3 = 0, B AS v % 3 = 1, C AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev12'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_alt_merge_nonalt'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -398,7 +398,7 @@ WINDOW w AS ( );'); -- ALT prefix/suffix absorbed into GROUP: (A|B) (A|B)+ (A|B) -> (A|B){3,} -CREATE VIEW rpr_ev13 AS +CREATE VIEW rpr_ev_state_alt_absorb_group AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -407,7 +407,7 @@ WINDOW w AS ( PATTERN ((A | B) (A | B)+ (A | B)) DEFINE A AS v % 2 = 0, B AS v % 2 = 1 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev13'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_alt_absorb_group'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -420,7 +420,7 @@ WINDOW w AS ( );'); -- High state count - alternation with plus quantifier -CREATE VIEW rpr_ev14 AS +CREATE VIEW rpr_ev_state_alt_plus AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -429,7 +429,7 @@ WINDOW w AS ( PATTERN ((A | B | C)+ D) DEFINE A AS v % 4 = 1, B AS v % 4 = 2, C AS v % 4 = 3, D AS v % 4 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev14'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_alt_plus'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -443,7 +443,7 @@ WINDOW w AS ( -- Early termination: first ALT branch (A) reaches FIN immediately, -- pruning second branch (A B+) before it can accumulate B repetitions. -CREATE VIEW rpr_ev15 AS +CREATE VIEW rpr_ev_state_alt_prune AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -452,7 +452,7 @@ WINDOW w AS ( PATTERN ((A | A B)+) DEFINE A AS v = 1, B AS v > 1 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev15'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_alt_prune'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -465,7 +465,7 @@ WINDOW w AS ( );'); -- Nested quantifiers causing state growth -CREATE VIEW rpr_ev16 AS +CREATE VIEW rpr_ev_state_nested_quant AS SELECT count(*) OVER w FROM generate_series(1, 1000) AS s(v) WINDOW w AS ( @@ -474,7 +474,7 @@ WINDOW w AS ( PATTERN (((A | B)+)+) DEFINE A AS v % 3 = 1, B AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev16'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_state_nested_quant'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -491,7 +491,7 @@ WINDOW w AS ( -- ============================================================ -- Context absorption with unbounded quantifier at start -CREATE VIEW rpr_ev17 AS +CREATE VIEW rpr_ev_ctx_absorb_unbounded AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -500,7 +500,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev17'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_absorb_unbounded'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -513,7 +513,7 @@ WINDOW w AS ( );'); -- No absorption - bounded quantifier -CREATE VIEW rpr_ev18 AS +CREATE VIEW rpr_ev_ctx_no_absorb AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -522,7 +522,7 @@ WINDOW w AS ( PATTERN (A{2,4} B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev18'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_no_absorb'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -535,7 +535,7 @@ WINDOW w AS ( );'); -- Contexts skipped by SKIP PAST LAST ROW -CREATE VIEW rpr_ev19 AS +CREATE VIEW rpr_ev_ctx_skip AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -544,7 +544,7 @@ WINDOW w AS ( PATTERN (A B C) DEFINE A AS v % 10 = 1, B AS v % 10 = 2, C AS v % 10 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev19'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_skip'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -557,7 +557,7 @@ WINDOW w AS ( );'); -- High context absorption - unbounded group -CREATE VIEW rpr_ev20 AS +CREATE VIEW rpr_ev_ctx_absorb_group AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -566,7 +566,7 @@ WINDOW w AS ( PATTERN ((A B)+ C) DEFINE A AS v % 3 = 1, B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev20'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_absorb_group'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -581,7 +581,7 @@ WINDOW w AS ( -- Fixed-length group absorption: (A B B)+ C -- B B merged to B{2}; absorbable with fixed-length check -- step_size=3 (A + B + B); v % 7 cycle gives 2 iterations per match -CREATE VIEW rpr_ev20b AS +CREATE VIEW rpr_ev_ctx_absorb_fixedvar AS SELECT count(*) OVER w FROM generate_series(1, 70) AS s(v) WINDOW w AS ( @@ -590,7 +590,7 @@ WINDOW w AS ( PATTERN ((A B B)+ C) DEFINE A AS v % 7 IN (1, 4), B AS v % 7 IN (2, 3, 5, 6), C AS v % 7 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev20b'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_absorb_fixedvar'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -604,7 +604,7 @@ WINDOW w AS ( -- Nested fixed-length group absorption: (A (B C){2} D)+ E -- step_size = 1 + (1+1)*2 + 1 = 6; v % 13 cycle gives 2 iterations + E -CREATE VIEW rpr_ev20c AS +CREATE VIEW rpr_ev_ctx_absorb_nested AS SELECT count(*) OVER w FROM generate_series(1, 65) AS s(v) WINDOW w AS ( @@ -615,7 +615,7 @@ WINDOW w AS ( C AS v % 13 IN (3, 5, 9, 11), D AS v % 13 IN (6, 12), E AS v % 13 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev20c'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_absorb_nested'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -631,7 +631,7 @@ WINDOW w AS ( -- Doubly nested fixed-length group absorption: (A ((B C{3}){2} D){2} E)+ F -- step_size = 1 + ((1+3)*2+1)*2 + 1 = 20; v % 41 cycle gives 2 iterations + F -CREATE VIEW rpr_ev20d AS +CREATE VIEW rpr_ev_ctx_absorb_deep AS SELECT count(*) OVER w FROM generate_series(1, 82) AS s(v) WINDOW w AS ( @@ -646,7 +646,7 @@ WINDOW w AS ( E AS v % 41 IN (20, 40), F AS v % 41 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev20d'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_absorb_deep'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -667,7 +667,7 @@ WINDOW w AS ( -- 3-level END chain absorption: ((A (B C){2}){2})+ -- step_size = (1 + (1+1)*2) * 2 = 10; v % 21 cycle gives 2 iterations -- END chain: END(BC{2}) -> END(A..{2}) -> END(+, ABSORBABLE) -CREATE VIEW rpr_ev20e AS +CREATE VIEW rpr_ev_ctx_absorb_endchain AS SELECT count(*) OVER w FROM generate_series(1, 42) AS s(v) WINDOW w AS ( @@ -678,7 +678,7 @@ WINDOW w AS ( B AS v % 21 IN (2, 4, 7, 9, 12, 14, 17, 19), C AS v % 21 IN (3, 5, 8, 10, 13, 15, 18, 20) ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev20e'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_ctx_absorb_endchain'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -697,7 +697,7 @@ WINDOW w AS ( -- ============================================================ -- Fixed length matches - all same length -CREATE VIEW rpr_ev21 AS +CREATE VIEW rpr_ev_mlen_fixed AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -708,7 +708,7 @@ WINDOW w AS ( A AS cat = 'A', B AS cat = 'B', C AS cat = 'C', D AS cat = 'D', E AS cat = 'E' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev21'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_mlen_fixed'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -723,7 +723,7 @@ WINDOW w AS ( );'); -- Variable length matches - min/max/avg differ -CREATE VIEW rpr_ev22 AS +CREATE VIEW rpr_ev_mlen_variable AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -732,7 +732,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 10 <> 0, B AS v % 10 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev22'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_mlen_variable'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -745,7 +745,7 @@ WINDOW w AS ( );'); -- Very long matches -CREATE VIEW rpr_ev23 AS +CREATE VIEW rpr_ev_mlen_long AS SELECT count(*) OVER w FROM generate_series(1, 200) AS s(v) WINDOW w AS ( @@ -754,7 +754,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v <= 195, B AS v > 195 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev23'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_mlen_long'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -767,7 +767,7 @@ WINDOW w AS ( );'); -- Uniform match length with mismatches from gap rows (v%20 = 11..15) -CREATE VIEW rpr_ev24 AS +CREATE VIEW rpr_ev_mlen_with_mismatch AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -778,7 +778,7 @@ WINDOW w AS ( A AS (v % 20 <> 0) AND (v % 20 <= 10 OR v % 20 > 15), B AS v % 20 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev24'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_mlen_with_mismatch'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -798,7 +798,7 @@ WINDOW w AS ( -- Pattern with complete match every cycle: 0 mismatched -- A(1,2,3) B(4,5) C(6) repeats perfectly; X rows are pruned, not mismatched -CREATE VIEW rpr_ev25 AS +CREATE VIEW rpr_ev_mlen_no_mismatch AS SELECT count(*) OVER w FROM ( SELECT v, @@ -814,7 +814,7 @@ WINDOW w AS ( PATTERN (A+ B+ C) DEFINE A AS cat = 'A', B AS cat = 'B', C AS cat = 'C' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev25'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_mlen_no_mismatch'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -834,7 +834,7 @@ WINDOW w AS ( );'); -- Long partial matches that fail -CREATE VIEW rpr_ev26 AS +CREATE VIEW rpr_ev_mlen_long_partial AS SELECT count(*) OVER w FROM ( SELECT i AS v, @@ -855,7 +855,7 @@ WINDOW w AS ( PATTERN (A+ B+ C) DEFINE A AS cat = 'A', B AS cat = 'B', C AS cat = 'C' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev26'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_mlen_long_partial'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -884,7 +884,7 @@ WINDOW w AS ( -- ============================================================ -- JSON format output with all statistics -CREATE VIEW rpr_ev27 AS +CREATE VIEW rpr_ev_json_basic AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -893,7 +893,7 @@ WINDOW w AS ( PATTERN (A+ B+) DEFINE A AS v % 3 = 1, B AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev27'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_json_basic'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF, FORMAT JSON) SELECT count(*) OVER w @@ -906,7 +906,7 @@ WINDOW w AS ( )'); -- JSON format with match length statistics -CREATE VIEW rpr_ev28 AS +CREATE VIEW rpr_ev_json_matchlen AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -915,7 +915,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 10 <> 0, B AS v % 10 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev28'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_json_matchlen'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF, FORMAT JSON) SELECT count(*) OVER w @@ -929,7 +929,7 @@ WINDOW w AS ( -- JSON format with mismatch statistics -- Pattern A B C expects 1,2,3 but gets 1,2,4 twice causing mismatches -CREATE VIEW rpr_ev29 AS +CREATE VIEW rpr_ev_json_mismatch AS SELECT count(*) OVER w FROM (VALUES (1),(2),(4), (1),(2),(4), (1),(2),(3)) AS t(v) WINDOW w AS ( @@ -938,7 +938,7 @@ WINDOW w AS ( PATTERN (A B C) DEFINE A AS v = 1, B AS v = 2, C AS v = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev29'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_json_mismatch'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF, FORMAT JSON) SELECT count(*) OVER w @@ -952,7 +952,7 @@ WINDOW w AS ( -- JSON format with skipped context statistics -- Alternation pattern with SKIP PAST LAST ROW causes many contexts to be skipped -CREATE VIEW rpr_ev30 AS +CREATE VIEW rpr_ev_json_skip AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -961,7 +961,7 @@ WINDOW w AS ( PATTERN ((A | B) (A | B) (A | B) (A | B) (A | B) (A | B) (A | B) (A | B)) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev30'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_json_skip'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF, FORMAT JSON) SELECT count(*) OVER w @@ -978,7 +978,7 @@ WINDOW w AS ( -- ============================================================ -- XML format output -CREATE VIEW rpr_ev31 AS +CREATE VIEW rpr_ev_xml_basic AS SELECT count(*) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -987,7 +987,7 @@ WINDOW w AS ( PATTERN (A B) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev31'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_xml_basic'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF, FORMAT XML) SELECT count(*) OVER w @@ -1004,7 +1004,7 @@ WINDOW w AS ( -- ============================================================ -- Statistics across multiple partitions -CREATE VIEW rpr_ev32 AS +CREATE VIEW rpr_ev_part_multi AS SELECT count(*) OVER w FROM ( SELECT p, v @@ -1018,7 +1018,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev32'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_part_multi'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1036,7 +1036,7 @@ WINDOW w AS ( );'); -- Different pattern behavior per partition -CREATE VIEW rpr_ev33 AS +CREATE VIEW rpr_ev_part_diff AS SELECT count(*) OVER w FROM ( SELECT @@ -1051,7 +1051,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS val < 5, B AS val >= 5 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev33'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_part_diff'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1074,7 +1074,7 @@ WINDOW w AS ( -- ============================================================ -- Empty result set -CREATE VIEW rpr_ev34 AS +CREATE VIEW rpr_ev_edge_empty AS SELECT count(*) OVER w FROM generate_series(1, 0) AS s(v) WINDOW w AS ( @@ -1083,7 +1083,7 @@ WINDOW w AS ( PATTERN (A B) DEFINE A AS v = 1, B AS v = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev34'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_edge_empty'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1096,7 +1096,7 @@ WINDOW w AS ( );'); -- Single row -CREATE VIEW rpr_ev35 AS +CREATE VIEW rpr_ev_edge_single_row AS SELECT count(*) OVER w FROM generate_series(1, 1) AS s(v) WINDOW w AS ( @@ -1105,7 +1105,7 @@ WINDOW w AS ( PATTERN (A) DEFINE A AS TRUE ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev35'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_edge_single_row'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1118,7 +1118,7 @@ WINDOW w AS ( );'); -- Pattern longer than data -CREATE VIEW rpr_ev36 AS +CREATE VIEW rpr_ev_edge_pattern_longer AS SELECT count(*) OVER w FROM generate_series(1, 5) AS s(v) WINDOW w AS ( @@ -1129,7 +1129,7 @@ WINDOW w AS ( A AS v = 1, B AS v = 2, C AS v = 3, D AS v = 4, E AS v = 5, F AS v = 6, G AS v = 7, H AS v = 8, I AS v = 9, J AS v = 10 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev36'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_edge_pattern_longer'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1144,7 +1144,7 @@ WINDOW w AS ( );'); -- All rows match as single match -CREATE VIEW rpr_ev37 AS +CREATE VIEW rpr_ev_edge_single_match AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -1153,7 +1153,7 @@ WINDOW w AS ( PATTERN (A+) DEFINE A AS TRUE ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev37'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_edge_single_match'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1170,7 +1170,7 @@ WINDOW w AS ( -- ============================================================ -- Nested groups -CREATE VIEW rpr_ev38 AS +CREATE VIEW rpr_ev_cpx_nested AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -1179,7 +1179,7 @@ WINDOW w AS ( PATTERN (((A B) C)+) DEFINE A AS v % 3 = 1, B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev38'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_cpx_nested'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1192,7 +1192,7 @@ WINDOW w AS ( );'); -- Multiple alternations -CREATE VIEW rpr_ev39 AS +CREATE VIEW rpr_ev_cpx_multi_alt AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -1203,7 +1203,7 @@ WINDOW w AS ( A AS cat = 'A', B AS cat = 'B', C AS cat = 'C', D AS cat = 'D', E AS cat = 'E' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev39'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_cpx_multi_alt'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1218,7 +1218,7 @@ WINDOW w AS ( );'); -- Optional elements -CREATE VIEW rpr_ev40 AS +CREATE VIEW rpr_ev_cpx_optional AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -1227,7 +1227,7 @@ WINDOW w AS ( PATTERN (A B? C) DEFINE A AS v % 4 = 1, B AS v % 4 = 2, C AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev40'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_cpx_optional'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1240,7 +1240,7 @@ WINDOW w AS ( );'); -- Bounded quantifiers -CREATE VIEW rpr_ev41 AS +CREATE VIEW rpr_ev_cpx_bounded AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -1249,7 +1249,7 @@ WINDOW w AS ( PATTERN (A{2,5} B) DEFINE A AS v % 10 <> 0, B AS v % 10 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev41'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_cpx_bounded'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1262,7 +1262,7 @@ WINDOW w AS ( );'); -- Star quantifier -CREATE VIEW rpr_ev42 AS +CREATE VIEW rpr_ev_cpx_star AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -1271,7 +1271,7 @@ WINDOW w AS ( PATTERN (A B* C) DEFINE A AS v % 10 = 1, B AS v % 10 IN (2,3,4,5,6,7,8), C AS v % 10 = 9 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev42'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_cpx_star'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1288,7 +1288,7 @@ WINDOW w AS ( -- ============================================================ -- Stock price pattern - V-shape (down then up) -CREATE VIEW rpr_ev43 AS +CREATE VIEW rpr_ev_real_vshape AS SELECT count(*) OVER w FROM rpr_nfa_complex WINDOW w AS ( @@ -1297,7 +1297,7 @@ WINDOW w AS ( PATTERN (D+ U+) DEFINE D AS trend = 'D', U AS trend = 'U' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev43'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_real_vshape'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1310,7 +1310,7 @@ WINDOW w AS ( );'); -- Stock price pattern - peak (up, stable, down) -CREATE VIEW rpr_ev44 AS +CREATE VIEW rpr_ev_real_peak AS SELECT count(*) OVER w FROM rpr_nfa_complex WINDOW w AS ( @@ -1319,7 +1319,7 @@ WINDOW w AS ( PATTERN (U+ S* D+) DEFINE U AS trend = 'U', S AS trend = 'S', D AS trend = 'D' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev44'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_real_peak'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1332,7 +1332,7 @@ WINDOW w AS ( );'); -- Consecutive increasing values (using PREV) -CREATE VIEW rpr_ev45 AS +CREATE VIEW rpr_ev_real_increasing AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -1341,7 +1341,7 @@ WINDOW w AS ( PATTERN (A{3,}) DEFINE A AS v > PREV(v) OR PREV(v) IS NULL ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev45'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_real_increasing'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1358,7 +1358,7 @@ WINDOW w AS ( -- ============================================================ -- Large dataset with simple pattern -CREATE VIEW rpr_ev46 AS +CREATE VIEW rpr_ev_perf_large_simple AS SELECT count(*) OVER w FROM generate_series(1, 1000) AS s(v) WINDOW w AS ( @@ -1367,7 +1367,7 @@ WINDOW w AS ( PATTERN (A B) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev46'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_perf_large_simple'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1380,7 +1380,7 @@ WINDOW w AS ( );'); -- Large dataset with absorption -CREATE VIEW rpr_ev47 AS +CREATE VIEW rpr_ev_perf_large_absorb AS SELECT count(*) OVER w FROM generate_series(1, 1000) AS s(v) WINDOW w AS ( @@ -1389,7 +1389,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 100 <> 0, B AS v % 100 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev47'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_perf_large_absorb'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1402,7 +1402,7 @@ WINDOW w AS ( );'); -- High state merge ratio -CREATE VIEW rpr_ev48 AS +CREATE VIEW rpr_ev_perf_high_merge AS SELECT count(*) OVER w FROM generate_series(1, 500) AS s(v) WINDOW w AS ( @@ -1411,7 +1411,7 @@ WINDOW w AS ( PATTERN ((A | B)+ C) DEFINE A AS v % 3 = 1, B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev48'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_perf_high_merge'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1428,7 +1428,7 @@ WINDOW w AS ( -- ============================================================ -- With INITIAL keyword -CREATE VIEW rpr_ev49 AS +CREATE VIEW rpr_ev_initial_with AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -1438,7 +1438,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev49'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_initial_with'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1452,7 +1452,7 @@ WINDOW w AS ( );'); -- Without INITIAL keyword (same behavior currently) -CREATE VIEW rpr_ev50 AS +CREATE VIEW rpr_ev_initial_without AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -1461,7 +1461,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev50'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_initial_without'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1478,7 +1478,7 @@ WINDOW w AS ( -- ============================================================ -- Plus quantifier -CREATE VIEW rpr_ev51 AS +CREATE VIEW rpr_ev_quant_plus AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -1487,7 +1487,7 @@ WINDOW w AS ( PATTERN (A+) DEFINE A AS v % 4 <> 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev51'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_quant_plus'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1500,7 +1500,7 @@ WINDOW w AS ( );'); -- Star quantifier (zero or more) -CREATE VIEW rpr_ev52 AS +CREATE VIEW rpr_ev_quant_star AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -1509,7 +1509,7 @@ WINDOW w AS ( PATTERN (A* B) DEFINE A AS v % 4 IN (1, 2), B AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev52'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_quant_star'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1522,7 +1522,7 @@ WINDOW w AS ( );'); -- Question mark (zero or one) -CREATE VIEW rpr_ev53 AS +CREATE VIEW rpr_ev_quant_question AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -1531,7 +1531,7 @@ WINDOW w AS ( PATTERN (A? B C) DEFINE A AS v % 4 = 1, B AS v % 4 = 2, C AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev53'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_quant_question'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1544,7 +1544,7 @@ WINDOW w AS ( );'); -- Exact count {n} -CREATE VIEW rpr_ev54 AS +CREATE VIEW rpr_ev_quant_exact AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -1553,7 +1553,7 @@ WINDOW w AS ( PATTERN (A{3} B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev54'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_quant_exact'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1566,7 +1566,7 @@ WINDOW w AS ( );'); -- Range {n,m} -CREATE VIEW rpr_ev55 AS +CREATE VIEW rpr_ev_quant_range AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -1575,7 +1575,7 @@ WINDOW w AS ( PATTERN (A{2,4} B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev55'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_quant_range'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1588,7 +1588,7 @@ WINDOW w AS ( );'); -- At least {n,} -CREATE VIEW rpr_ev56 AS +CREATE VIEW rpr_ev_quant_atleast AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -1597,7 +1597,7 @@ WINDOW w AS ( PATTERN (A{3,} B) DEFINE A AS v % 10 <> 0, B AS v % 10 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev56'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_quant_atleast'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1615,7 +1615,7 @@ WINDOW w AS ( -- Verify state count accuracy -- Pattern A+ B with 20 rows should show predictable state behavior -CREATE VIEW rpr_ev57 AS +CREATE VIEW rpr_ev_reg_state_count AS SELECT count(*) OVER w FROM generate_series(1, 20) AS s(v) WINDOW w AS ( @@ -1624,7 +1624,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev57'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_reg_state_count'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1637,7 +1637,7 @@ WINDOW w AS ( );'); -- Verify context count with known absorption -CREATE VIEW rpr_ev58 AS +CREATE VIEW rpr_ev_reg_ctx_absorb AS SELECT count(*) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -1646,7 +1646,7 @@ WINDOW w AS ( PATTERN (A+ B C) DEFINE A AS v % 10 IN (1,2,3,4,5,6,7), B AS v % 10 = 8, C AS v % 10 = 9 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev58'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_reg_ctx_absorb'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1659,7 +1659,7 @@ WINDOW w AS ( );'); -- Verify match length with fixed-length pattern -CREATE VIEW rpr_ev59 AS +CREATE VIEW rpr_ev_reg_matchlen AS SELECT count(*) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -1668,7 +1668,7 @@ WINDOW w AS ( PATTERN (A B C) DEFINE A AS v % 3 = 1, B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev59'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_reg_matchlen'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1685,7 +1685,7 @@ WINDOW w AS ( -- ============================================================ -- Simple alternation -CREATE VIEW rpr_ev60 AS +CREATE VIEW rpr_ev_alt_simple AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -1694,7 +1694,7 @@ WINDOW w AS ( PATTERN ((A | B) C) DEFINE A AS cat = 'A', B AS cat = 'B', C AS cat = 'C' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev60'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_simple'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1707,7 +1707,7 @@ WINDOW w AS ( );'); -- Multiple items in alternation -CREATE VIEW rpr_ev61 AS +CREATE VIEW rpr_ev_alt_multi_item AS SELECT count(*) OVER w FROM rpr_nfa_test WINDOW w AS ( @@ -1718,7 +1718,7 @@ WINDOW w AS ( A AS cat = 'A', B AS cat = 'B', C AS cat = 'C', D AS cat = 'D', E AS cat = 'E' ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev61'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_multi_item'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1733,7 +1733,7 @@ WINDOW w AS ( );'); -- Alternation with quantifiers -CREATE VIEW rpr_ev62 AS +CREATE VIEW rpr_ev_alt_with_quant AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -1742,7 +1742,7 @@ WINDOW w AS ( PATTERN ((A | B)+ C) DEFINE A AS v % 3 = 1, B AS v % 3 = 2, C AS v % 3 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev62'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_with_quant'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1755,7 +1755,7 @@ WINDOW w AS ( );'); -- Multiple alternatives (4+) -CREATE VIEW rpr_ev63 AS +CREATE VIEW rpr_ev_alt_four_plus AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -1763,7 +1763,7 @@ WINDOW w AS ( PATTERN (A | B | C | D | E) DEFINE A AS v % 5 = 0, B AS v % 5 = 1, C AS v % 5 = 2, D AS v % 5 = 3, E AS v % 5 = 4 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev63'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_four_plus'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1775,7 +1775,7 @@ WINDOW w AS ( );'); -- Alternation at start -CREATE VIEW rpr_ev64 AS +CREATE VIEW rpr_ev_alt_at_start AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -1783,7 +1783,7 @@ WINDOW w AS ( PATTERN ((A | B) C D) DEFINE A AS v % 4 = 0, B AS v % 4 = 1, C AS v % 4 = 2, D AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev64'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_at_start'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1795,7 +1795,7 @@ WINDOW w AS ( );'); -- Multiple sequential alternations -CREATE VIEW rpr_ev65 AS +CREATE VIEW rpr_ev_alt_sequential AS SELECT count(*) OVER w FROM generate_series(1, 100) AS s(v) WINDOW w AS ( @@ -1803,7 +1803,7 @@ WINDOW w AS ( PATTERN ((A | B) C (D | E) F) DEFINE A AS v % 6 = 0, B AS v % 6 = 1, C AS v % 6 = 2, D AS v % 6 = 3, E AS v % 6 = 4, F AS v % 6 = 5 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev65'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_sequential'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1815,7 +1815,7 @@ WINDOW w AS ( );'); -- Quantified alternatives -CREATE VIEW rpr_ev66 AS +CREATE VIEW rpr_ev_alt_quantified AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -1823,7 +1823,7 @@ WINDOW w AS ( PATTERN ((A+ | B+) C) DEFINE A AS v % 3 = 0, B AS v % 3 = 1, C AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev66'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_quantified'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1835,7 +1835,7 @@ WINDOW w AS ( );'); -- Alternation at end -CREATE VIEW rpr_ev67 AS +CREATE VIEW rpr_ev_alt_at_end AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -1843,7 +1843,7 @@ WINDOW w AS ( PATTERN (A B (C | D)) DEFINE A AS v % 4 = 0, B AS v % 4 = 1, C AS v % 4 = 2, D AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev67'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_at_end'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1856,7 +1856,7 @@ WINDOW w AS ( -- Nested ALT at start of branch inside outer ALT -- Pattern: (A ((B | C) D | E)) - preceding VAR + inner ALT as first branch element -CREATE VIEW rpr_ev68 AS +CREATE VIEW rpr_ev_alt_nested_start AS SELECT count(*) OVER w FROM generate_series(1, 20) AS s(v) WINDOW w AS ( @@ -1864,7 +1864,7 @@ WINDOW w AS ( PATTERN (A ((B | C) D | E)) DEFINE A AS v % 5 = 0, B AS v % 5 = 1, C AS v % 5 = 2, D AS v % 5 = 3, E AS v % 5 = 4 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev68'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_nested_start'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1877,7 +1877,7 @@ WINDOW w AS ( -- Nested ALT at end of branch inside outer ALT -- Pattern: (C (A | B) | D) - inner ALT is last element in outer branch -CREATE VIEW rpr_ev69 AS +CREATE VIEW rpr_ev_alt_nested_end AS SELECT count(*) OVER w FROM generate_series(1, 20) AS s(v) WINDOW w AS ( @@ -1885,7 +1885,7 @@ WINDOW w AS ( PATTERN (C (A | B) | D) DEFINE A AS v % 4 = 0, B AS v % 4 = 1, C AS v % 4 = 2, D AS v % 4 = 3 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev69'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_alt_nested_end'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1901,7 +1901,7 @@ WINDOW w AS ( -- ============================================================ -- Simple group -CREATE VIEW rpr_ev70 AS +CREATE VIEW rpr_ev_grp_simple AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -1910,7 +1910,7 @@ WINDOW w AS ( PATTERN ((A B)+) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev70'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_simple'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1923,7 +1923,7 @@ WINDOW w AS ( );'); -- Group with bounded quantifier -CREATE VIEW rpr_ev71 AS +CREATE VIEW rpr_ev_grp_bounded AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -1932,7 +1932,7 @@ WINDOW w AS ( PATTERN ((A B){2,4}) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev71'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_bounded'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1945,7 +1945,7 @@ WINDOW w AS ( );'); -- Nested groups -CREATE VIEW rpr_ev72 AS +CREATE VIEW rpr_ev_grp_nested AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -1954,7 +1954,7 @@ WINDOW w AS ( PATTERN (((A B){2})+) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev72'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_nested'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1967,7 +1967,7 @@ WINDOW w AS ( );'); -- Deep nesting (3+ levels) -CREATE VIEW rpr_ev73 AS +CREATE VIEW rpr_ev_grp_deep AS SELECT count(*) OVER w FROM generate_series(1, 40) AS s(v) WINDOW w AS ( @@ -1975,7 +1975,7 @@ WINDOW w AS ( PATTERN ((((A | B)+)+)+) DEFINE A AS v % 2 = 0, B AS v % 2 = 1 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev73'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_deep'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -1987,7 +1987,7 @@ WINDOW w AS ( );'); -- Bounded quantifier on alternation -CREATE VIEW rpr_ev74 AS +CREATE VIEW rpr_ev_grp_bounded_alt AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -1995,7 +1995,7 @@ WINDOW w AS ( PATTERN ((A | B){2,3} C) DEFINE A AS v % 3 = 0, B AS v % 3 = 1, C AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev74'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_bounded_alt'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -2007,7 +2007,7 @@ WINDOW w AS ( );'); -- Nested groups with quantifiers -CREATE VIEW rpr_ev75 AS +CREATE VIEW rpr_ev_grp_nested_quant AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -2015,7 +2015,7 @@ WINDOW w AS ( PATTERN (((A B)+ C)*) DEFINE A AS v % 3 = 0, B AS v % 3 = 1, C AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev75'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_nested_quant'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -2027,7 +2027,7 @@ WINDOW w AS ( );'); -- Partial nested quantification -CREATE VIEW rpr_ev76 AS +CREATE VIEW rpr_ev_grp_partial_quant AS SELECT count(*) OVER w FROM generate_series(1, 60) AS s(v) WINDOW w AS ( @@ -2035,7 +2035,7 @@ WINDOW w AS ( PATTERN ((A (B C)+)*) DEFINE A AS v % 3 = 0, B AS v % 3 = 1, C AS v % 3 = 2 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev76'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_grp_partial_quant'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -2051,7 +2051,7 @@ WINDOW w AS ( -- ============================================================ -- count(*) with pattern -CREATE VIEW rpr_ev77 AS +CREATE VIEW rpr_ev_wfn_count AS SELECT count(*) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -2060,7 +2060,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev77'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_wfn_count'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -2073,7 +2073,7 @@ WINDOW w AS ( );'); -- first_value with pattern -CREATE VIEW rpr_ev78 AS +CREATE VIEW rpr_ev_wfn_first_value AS SELECT first_value(v) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -2082,7 +2082,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev78'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_wfn_first_value'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT first_value(v) OVER w @@ -2095,7 +2095,7 @@ WINDOW w AS ( );'); -- last_value with pattern -CREATE VIEW rpr_ev79 AS +CREATE VIEW rpr_ev_wfn_last_value AS SELECT last_value(v) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -2104,7 +2104,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev79'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_wfn_last_value'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT last_value(v) OVER w @@ -2117,7 +2117,7 @@ WINDOW w AS ( );'); -- Multiple window functions -CREATE VIEW rpr_ev80 AS +CREATE VIEW rpr_ev_wfn_multi AS SELECT count(*) OVER w, first_value(v) OVER w, @@ -2129,7 +2129,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v % 5 <> 0, B AS v % 5 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev80'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_wfn_multi'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT @@ -2149,7 +2149,7 @@ WINDOW w AS ( -- ============================================================ -- Complex boolean expressions -CREATE VIEW rpr_ev81 AS +CREATE VIEW rpr_ev_def_complex_bool AS SELECT count(*) OVER w FROM generate_series(1, 50) AS s(v) WINDOW w AS ( @@ -2160,7 +2160,7 @@ WINDOW w AS ( A AS (v % 5 <> 0) AND (v % 3 <> 0), B AS (v % 5 = 0) OR (v % 3 = 0) ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev81'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_def_complex_bool'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -2175,7 +2175,7 @@ WINDOW w AS ( );'); -- Using PREV function -CREATE VIEW rpr_ev82 AS +CREATE VIEW rpr_ev_def_prev AS SELECT count(*) OVER w FROM generate_series(1, 30) AS s(v) WINDOW w AS ( @@ -2187,7 +2187,7 @@ WINDOW w AS ( U AS v > PREV(v), D AS v < PREV(v) ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev82'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_def_prev'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -2203,7 +2203,7 @@ WINDOW w AS ( );'); -- Using NULL comparisons -CREATE VIEW rpr_ev83 AS +CREATE VIEW rpr_ev_def_null AS SELECT count(*) OVER w FROM ( SELECT CASE WHEN v % 5 = 0 THEN NULL ELSE v END AS v @@ -2215,7 +2215,7 @@ WINDOW w AS ( PATTERN (A+ B) DEFINE A AS v IS NOT NULL, B AS v IS NULL ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev83'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_def_null'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -2235,7 +2235,7 @@ WINDOW w AS ( -- ============================================================ -- 500 rows - verify statistics scale correctly -CREATE VIEW rpr_ev84 AS +CREATE VIEW rpr_ev_scale_500rows AS SELECT count(*) OVER w FROM generate_series(1, 500) AS s(v) WINDOW w AS ( @@ -2244,7 +2244,7 @@ WINDOW w AS ( PATTERN (A+ B C) DEFINE A AS v % 10 < 7, B AS v % 10 = 7, C AS v % 10 = 8 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev84'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_scale_500rows'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -2257,7 +2257,7 @@ WINDOW w AS ( );'); -- High match count scenario -CREATE VIEW rpr_ev85 AS +CREATE VIEW rpr_ev_scale_high_match AS SELECT count(*) OVER w FROM generate_series(1, 500) AS s(v) WINDOW w AS ( @@ -2266,7 +2266,7 @@ WINDOW w AS ( PATTERN (A B) DEFINE A AS v % 2 = 1, B AS v % 2 = 0 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev85'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_scale_high_match'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -2279,7 +2279,7 @@ WINDOW w AS ( );'); -- High skip count scenario -CREATE VIEW rpr_ev86 AS +CREATE VIEW rpr_ev_scale_high_skip AS SELECT count(*) OVER w FROM generate_series(1, 500) AS s(v) WINDOW w AS ( @@ -2293,7 +2293,7 @@ WINDOW w AS ( D AS v % 100 = 4, E AS v % 100 = 5 ); -SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev86'), E'\n')) AS line WHERE line ~ 'PATTERN'; +SELECT line FROM unnest(string_to_array(pg_get_viewdef('rpr_ev_scale_high_skip'), E'\n')) AS line WHERE line ~ 'PATTERN'; SELECT rpr_explain_filter(' EXPLAIN (ANALYZE, BUFFERS OFF, COSTS OFF, TIMING OFF, SUMMARY OFF) SELECT count(*) OVER w @@ -2321,7 +2321,7 @@ WINDOW w AS ( -- -- Without RPR: row_number() frame is optimized to ROWS UNBOUNDED PRECEDING -CREATE VIEW rpr_ev87 AS +CREATE VIEW rpr_ev_opt_no_rpr AS SELECT row_number() OVER w FROM generate_series(1, 10) AS s(v) WINDOW w AS ( @@ -2329,10 +2329,10 @@ WINDOW w AS ( ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ); -EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev87; +EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev_opt_no_rpr; -- With RPR: frame must remain ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING -CREATE VIEW rpr_ev88 AS +CREATE VIEW rpr_ev_opt_with_rpr AS SELECT row_number() OVER w FROM generate_series(1, 10) AS s(v) WINDOW w AS ( @@ -2344,13 +2344,13 @@ WINDOW w AS ( B AS v > PREV(v) ); -EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev88; +EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev_opt_with_rpr; -- -- Planner optimization: non-RPR and RPR windows that share the same base frame -- after frame optimization are kept as separate WindowAgg nodes. -- -CREATE VIEW rpr_ev89 AS +CREATE VIEW rpr_ev_opt_mixed AS SELECT row_number() OVER w_normal AS rn_normal, row_number() OVER w_rpr AS rn_rpr @@ -2364,7 +2364,7 @@ WINDOW DEFINE A AS v > 1 ); -EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev89; +EXPLAIN (COSTS OFF) SELECT * FROM rpr_ev_opt_mixed; -- -- Planner optimization: find_window_run_conditions must not push down -- 2.50.1 (Apple Git-155)