Por alguna razón, Snowflake está eliminando las barras diagonales inversas de mi función regex, pero solo cuando coloco la función entre "$$" al crear un procedimiento de Javascript.
Para el contexto aquí está mi función Regex:
CREATE OR REPLACE FUNCTION "REGEX_REPLACE_ME"("SUBJECT" VARCHAR(16777216), "PATTERN" VARCHAR(16777216), "REPLACEMENT" VARCHAR(16777216)) RETURNS VARCHAR(16777216) LANGUAGE JAVASCRIPT AS ' const p = SUBJECT; let regex = new RegExp(PATTERN, ''i'') return p.replace(regex, REPLACEMENT); ';Cuando lo ejecuto simplemente en SQL, funciona; cambiará "APPLE.com" a "APPLE".
SELECT REXP_REPLACE_ME('APPLE.COM','\\.[AZ]{2,3}',' ') -- the regex pattern \\.[AZ]{2,3} is meant to remove domains ie ".com",".org", etc..Sin embargo, cuando lo ejecuto dentro de $$ de un procedimiento almacenado, elimina las barras invertidas de mi patrón de expresiones regulares y, en consecuencia, cambia el patrón de expresiones regulares por completo.
Mi expresión regular cambia de \\.[AZ]{2,3} a -> .[AZ]{2,3}
CREATE or replace PROCEDURE TESTING_FUNC_1_THIS_CAN_BE_DELETED() RETURNS VARCHAR LANGUAGE javascript AS $$ var rs = snowflake.execute( { sqlText: ` CREATE OR REPLACE VIEW Database.Schema.Table AS SELECT REXP_REPLACE_ME('APPLE.COM','\\.[AZ]{2,3}',' ') as column_cleaned -- ,REXP_REPLACE_ME_WTF('APPLE.COM','\\.[AZ]{2,3}',' ') AS WHAT_PATTERN_IS_BEING_OUTPUTTED -- function logic in code block below ` } ); $$; call TESTING_FUNC_1_THIS_CAN_BE_DELETED(); select * from Database.Schema.TableRascándome la cabeza aquí, creé esta función para mostrar qué patrón estaba generando y así es como llegué a la conclusión (puedo estar equivocado aquí...) que cuando Snowflake está compilando está eliminando la barra invertida...
CREATE OR REPLACE FUNCTION "REXP_REPLACE_ME_WTF"("SUBJECT" VARCHAR(16777216), "PATTERN" VARCHAR(16777216), "REPLACEMENT" VARCHAR(16777216)) RETURNS VARCHAR(16777216) LANGUAGE JAVASCRIPT AS ' const p = SUBJECT; let regex = new RegExp(PATTERN, ''i''); //return p.replace(regex, REPLACEMENT); return PATTERN; ';¿Algunas ideas?
Snowflake SQL usa \ como carácter de escape, por lo que para representar una barra invertida en Snowflake SQL debe usar \\ .
JavaScript también usa \ como carácter de escape, por lo que para representar una barra invertida en JavaScript también debe usar \\
Si desea representar una sola barra invertida en Snowflake SQL a través de JavaScript, debe enviar 2 x 2 = 4 barras invertidas \\\\
Probablemente algo relacionado con los personajes de escape, etc.
Intente envolver su instrucción SQL con acentos graves en lugar de comillas simples: ``