From d6e986d8faaf5e9018289feffe405f2e9f40a38f Mon Sep 17 00:00:00 2001 From: Pranav C Date: Wed, 22 Nov 2023 07:17:54 +0000 Subject: [PATCH] feat: add regex method support - pg --- packages/nocodb/src/db/functionMappings/pg.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/packages/nocodb/src/db/functionMappings/pg.ts b/packages/nocodb/src/db/functionMappings/pg.ts index 79aafa86a9..7679f86ecf 100644 --- a/packages/nocodb/src/db/functionMappings/pg.ts +++ b/packages/nocodb/src/db/functionMappings/pg.ts @@ -189,6 +189,32 @@ const pg = { builder: knex.raw(`MOD((${x})::NUMERIC, (${y})::NUMERIC) ${colAlias}`), }; }, + REGEX_MATCH: async ({ fn, knex, pt, colAlias }: MapFnArgs) => { + const source = (await fn(pt.arguments[0])).builder; + const pattern = (await fn(pt.arguments[1])).builder; + return { + builder: knex.raw(`${source}::text ~ ${pattern}::text) ${colAlias}`), + }; + }, + REGEX_EXTRACT: async ({ fn, knex, pt, colAlias }: MapFnArgs) => { + const source = (await fn(pt.arguments[0])).builder; + const pattern = (await fn(pt.arguments[1])).builder; + return { + builder: knex.raw( + `regexp_matches(${source}::text, ${pattern}::text) ${colAlias}`, + ), + }; + }, + REGEX_REPLACE: async ({ fn, knex, pt, colAlias }: MapFnArgs) => { + const source = (await fn(pt.arguments[0])).builder; + const pattern = (await fn(pt.arguments[1])).builder; + const replacement = (await fn(pt.arguments[2])).builder; + return { + builder: knex.raw( + `regexp_matches(${source}::text, ${pattern}::text, ${replacement}::text) ${colAlias}`, + ), + }; + }, }; export default pg;