From f4e88d385bfafaedc31c45fc091bca27a7a30653 Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Fri, 2 Jun 2023 23:26:21 +0200 Subject: [PATCH] Escaped parameters name --- .../definition/parse/ParsingFunction.kt | 2 +- .../postgresjson/definition/FunctionTest.kt | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/fr/postgresjson/definition/parse/ParsingFunction.kt b/src/main/kotlin/fr/postgresjson/definition/parse/ParsingFunction.kt index d6028f1..9b5b749 100644 --- a/src/main/kotlin/fr/postgresjson/definition/parse/ParsingFunction.kt +++ b/src/main/kotlin/fr/postgresjson/definition/parse/ParsingFunction.kt @@ -94,7 +94,7 @@ private fun ScriptPart.getParameterMode(): NextScript { @Throws(ParameterNameMalformed::class) private fun ScriptPart.getParameterName(): NextScript { try { - return getNextScript { afterBeginBy(" ", "\n") } + return getNextScript { afterBeginBy(" ", "\n") && status.isNotEscaped() } } catch (e: ParseException) { throw ParameterNameMalformed(this, e) } diff --git a/src/test/kotlin/fr/postgresjson/definition/FunctionTest.kt b/src/test/kotlin/fr/postgresjson/definition/FunctionTest.kt index 600f13b..0a40efc 100644 --- a/src/test/kotlin/fr/postgresjson/definition/FunctionTest.kt +++ b/src/test/kotlin/fr/postgresjson/definition/FunctionTest.kt @@ -135,6 +135,25 @@ class FunctionTest : FreeSpec({ } } + "Escaped parameters name" - { + val param = parseFunction( + // language=PostgreSQL + """ + create or replace function myfun("one""or two" text, "#@€" int) returns text language plpgsql as + $$ begin end;$$; + """.trimIndent() + ).parameters + + "should have 2 parameters" { + param shouldHaveSize 2 + } + + "should have names" { + param[0].name shouldBe "one\"or two" + param[1].name shouldBe "#@€" + } + } + "Parameters with type `character varying(255)`" - { val param = parseFunction( // language=PostgreSQL