diff options
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/regex.out | 169 | ||||
| -rw-r--r-- | src/test/regress/sql/regex.sql | 35 |
2 files changed, 204 insertions, 0 deletions
diff --git a/src/test/regress/expected/regex.out b/src/test/regress/expected/regex.out index be151858a38..f0e2fc9eb89 100644 --- a/src/test/regress/expected/regex.out +++ b/src/test/regress/expected/regex.out @@ -90,6 +90,175 @@ select substring('a' from '((a)+)'); a (1 row) +-- Test lookahead constraints +select regexp_matches('ab', 'a(?=b)b*'); + regexp_matches +---------------- + {ab} +(1 row) + +select regexp_matches('a', 'a(?=b)b*'); + regexp_matches +---------------- +(0 rows) + +select regexp_matches('abc', 'a(?=b)b*(?=c)c*'); + regexp_matches +---------------- + {abc} +(1 row) + +select regexp_matches('ab', 'a(?=b)b*(?=c)c*'); + regexp_matches +---------------- +(0 rows) + +select regexp_matches('ab', 'a(?!b)b*'); + regexp_matches +---------------- +(0 rows) + +select regexp_matches('a', 'a(?!b)b*'); + regexp_matches +---------------- + {a} +(1 row) + +select regexp_matches('b', '(?=b)b'); + regexp_matches +---------------- + {b} +(1 row) + +select regexp_matches('a', '(?=b)b'); + regexp_matches +---------------- +(0 rows) + +-- Test lookbehind constraints +select regexp_matches('abb', '(?<=a)b*'); + regexp_matches +---------------- + {bb} +(1 row) + +select regexp_matches('a', 'a(?<=a)b*'); + regexp_matches +---------------- + {a} +(1 row) + +select regexp_matches('abc', 'a(?<=a)b*(?<=b)c*'); + regexp_matches +---------------- + {abc} +(1 row) + +select regexp_matches('ab', 'a(?<=a)b*(?<=b)c*'); + regexp_matches +---------------- + {ab} +(1 row) + +select regexp_matches('ab', 'a*(?<!a)b*'); + regexp_matches +---------------- + {""} +(1 row) + +select regexp_matches('ab', 'a*(?<!a)b+'); + regexp_matches +---------------- +(0 rows) + +select regexp_matches('b', 'a*(?<!a)b+'); + regexp_matches +---------------- + {b} +(1 row) + +select regexp_matches('a', 'a(?<!a)b*'); + regexp_matches +---------------- +(0 rows) + +select regexp_matches('b', '(?<=b)b'); + regexp_matches +---------------- +(0 rows) + +select regexp_matches('foobar', '(?<=f)b+'); + regexp_matches +---------------- +(0 rows) + +select regexp_matches('foobar', '(?<=foo)b+'); + regexp_matches +---------------- + {b} +(1 row) + +select regexp_matches('foobar', '(?<=oo)b+'); + regexp_matches +---------------- + {b} +(1 row) + +-- Test optimization of single-chr-or-bracket-expression lookaround constraints +select 'xz' ~ 'x(?=[xy])'; + ?column? +---------- + f +(1 row) + +select 'xy' ~ 'x(?=[xy])'; + ?column? +---------- + t +(1 row) + +select 'xz' ~ 'x(?![xy])'; + ?column? +---------- + t +(1 row) + +select 'xy' ~ 'x(?![xy])'; + ?column? +---------- + f +(1 row) + +select 'x' ~ 'x(?![xy])'; + ?column? +---------- + t +(1 row) + +select 'xyy' ~ '(?<=[xy])yy+'; + ?column? +---------- + t +(1 row) + +select 'zyy' ~ '(?<=[xy])yy+'; + ?column? +---------- + f +(1 row) + +select 'xyy' ~ '(?<![xy])yy+'; + ?column? +---------- + f +(1 row) + +select 'zyy' ~ '(?<![xy])yy+'; + ?column? +---------- + t +(1 row) + -- Test conversion of regex patterns to indexable conditions explain (costs off) select * from pg_proc where proname ~ 'abc'; QUERY PLAN diff --git a/src/test/regress/sql/regex.sql b/src/test/regress/sql/regex.sql index c59fa35f24d..d3030af295d 100644 --- a/src/test/regress/sql/regex.sql +++ b/src/test/regress/sql/regex.sql @@ -25,6 +25,41 @@ select substring('asd TO foo' from ' TO (([a-z0-9._]+|"([^"]+|"")+")+)'); select substring('a' from '((a))+'); select substring('a' from '((a)+)'); +-- Test lookahead constraints +select regexp_matches('ab', 'a(?=b)b*'); +select regexp_matches('a', 'a(?=b)b*'); +select regexp_matches('abc', 'a(?=b)b*(?=c)c*'); +select regexp_matches('ab', 'a(?=b)b*(?=c)c*'); +select regexp_matches('ab', 'a(?!b)b*'); +select regexp_matches('a', 'a(?!b)b*'); +select regexp_matches('b', '(?=b)b'); +select regexp_matches('a', '(?=b)b'); + +-- Test lookbehind constraints +select regexp_matches('abb', '(?<=a)b*'); +select regexp_matches('a', 'a(?<=a)b*'); +select regexp_matches('abc', 'a(?<=a)b*(?<=b)c*'); +select regexp_matches('ab', 'a(?<=a)b*(?<=b)c*'); +select regexp_matches('ab', 'a*(?<!a)b*'); +select regexp_matches('ab', 'a*(?<!a)b+'); +select regexp_matches('b', 'a*(?<!a)b+'); +select regexp_matches('a', 'a(?<!a)b*'); +select regexp_matches('b', '(?<=b)b'); +select regexp_matches('foobar', '(?<=f)b+'); +select regexp_matches('foobar', '(?<=foo)b+'); +select regexp_matches('foobar', '(?<=oo)b+'); + +-- Test optimization of single-chr-or-bracket-expression lookaround constraints +select 'xz' ~ 'x(?=[xy])'; +select 'xy' ~ 'x(?=[xy])'; +select 'xz' ~ 'x(?![xy])'; +select 'xy' ~ 'x(?![xy])'; +select 'x' ~ 'x(?![xy])'; +select 'xyy' ~ '(?<=[xy])yy+'; +select 'zyy' ~ '(?<=[xy])yy+'; +select 'xyy' ~ '(?<![xy])yy+'; +select 'zyy' ~ '(?<![xy])yy+'; + -- Test conversion of regex patterns to indexable conditions explain (costs off) select * from pg_proc where proname ~ 'abc'; explain (costs off) select * from pg_proc where proname ~ '^abc'; |
