From 9c20ef1b6768b616a91d09d66269068c1a586d73 Mon Sep 17 00:00:00 2001 From: Victor Petrovykh Date: Wed, 27 Jun 2018 18:30:00 -0400 Subject: [PATCH] edgeql: Add `re_replace` function to `std`. --- edb/lang/schema/_graphql.eql | 4 ++-- edb/lang/schema/_std.eql | 6 ++++++ tests/test_edgeql_functions.py | 26 ++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/edb/lang/schema/_graphql.eql b/edb/lang/schema/_graphql.eql index 41d12f0b1a..f02b5ca6e7 100644 --- a/edb/lang/schema/_graphql.eql +++ b/edb/lang/schema/_graphql.eql @@ -18,8 +18,8 @@ CREATE FUNCTION graphql::short_name(std::str) -> std::str - FROM SQL $$ - SELECT regexp_replace($1, '.+?::(.+$)', '\1'); + FROM EdgeQL $$ + SELECT re_replace($0, '.+?::(.+$)', '\1') $$; # create Query diff --git a/edb/lang/schema/_std.eql b/edb/lang/schema/_std.eql index 547b9adb3d..fd3b0ba02c 100644 --- a/edb/lang/schema/_std.eql +++ b/edb/lang/schema/_std.eql @@ -167,6 +167,12 @@ CREATE FUNCTION std::re_test(std::str, std::str) -> std::bool SELECT $1 ~ $2; $$; +CREATE FUNCTION std::re_replace(std::str, std::str, std::str, std::str = '') + -> std::str + FROM SQL $$ + SELECT regexp_replace($1, $2, $3, $4); + $$; + CREATE FUNCTION std::current_date() -> std::date FROM SQL 'SELECT current_date'; diff --git a/tests/test_edgeql_functions.py b/tests/test_edgeql_functions.py index dea9c43cce..232e776009 100644 --- a/tests/test_edgeql_functions.py +++ b/tests/test_edgeql_functions.py @@ -466,6 +466,32 @@ async def test_edgeql_functions_re_test_02(self): [True], ]) + async def test_edgeql_functions_re_replace_01(self): + await self.assert_query_result(r''' + SELECT re_replace('Hello World', 'l', 'L'); + SELECT re_replace('Hello World', 'l', 'L', 'g'); + SELECT re_replace('Hello World', '[a-z]', '~', 'i'); + SELECT re_replace('Hello World', '[a-z]', '~', 'gi'); + ''', [ + ['HeLlo World'], + ['HeLLo WorLd'], + ['~ello World'], + ['~~~~~ ~~~~~'], + ]) + + async def test_edgeql_functions_re_replace_02(self): + await self.assert_query_result(r''' + SELECT re_replace(test::User.name, '[aeiou]', '~'); + SELECT re_replace(test::User.name, '[aeiou]', '~', 'g'); + SELECT re_replace(test::User.name, '[aeiou]', '~', 'i'); + SELECT re_replace(test::User.name, '[aeiou]', '~', 'gi'); + ''', [ + {'Elv~s', 'Y~ry'}, + {'Elv~s', 'Y~ry'}, + {'~lvis', 'Y~ry'}, + {'~lv~s', 'Y~ry'}, + ]) + async def test_edgeql_functions_sum_01(self): await self.assert_query_result(r''' SELECT sum({1, 2, 3, -4, 5});