diff --git a/CHANGELOG.md b/CHANGELOG.md index a07397c..524c89a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.4 (unreleased) + +- Improved error message for malformed vector literal + ## 0.4.3 (2023-06-10) - Improved cost estimation diff --git a/src/vector.c b/src/vector.c index da51d92..be194eb 100644 --- a/src/vector.c +++ b/src/vector.c @@ -174,6 +174,7 @@ vector_in(PG_FUNCTION_ARGS) char *pt; char *stringEnd; Vector *result; + char *lit = pstrdup(str); while (vector_isspace(*str)) str++; @@ -181,7 +182,7 @@ vector_in(PG_FUNCTION_ARGS) if (*str != '[') ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), - errmsg("malformed vector literal: \"%s\"", str), + errmsg("malformed vector literal: \"%s\"", lit), errdetail("Vector contents must start with \"[\"."))); str++; @@ -219,7 +220,7 @@ vector_in(PG_FUNCTION_ARGS) if (*stringEnd != ']') ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), - errmsg("malformed vector literal"), + errmsg("malformed vector literal: \"%s\"", lit), errdetail("Unexpected end of input."))); stringEnd++; @@ -231,7 +232,7 @@ vector_in(PG_FUNCTION_ARGS) if (*stringEnd != '\0') ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), - errmsg("malformed vector literal"), + errmsg("malformed vector literal: \"%s\"", lit), errdetail("Junk after closing right brace."))); if (dim < 1) @@ -239,6 +240,8 @@ vector_in(PG_FUNCTION_ARGS) (errcode(ERRCODE_DATA_EXCEPTION), errmsg("vector must have at least 1 dimension"))); + pfree(lit); + CheckExpectedDim(typmod, dim); result = InitVector(dim); diff --git a/test/expected/input.out b/test/expected/input.out index b6ccca4..d2cb1c6 100644 --- a/test/expected/input.out +++ b/test/expected/input.out @@ -43,12 +43,12 @@ ERROR: infinite value not allowed in vector LINE 1: SELECT '[4e38,1]'::vector; ^ SELECT '[1,2,3'::vector; -ERROR: malformed vector literal +ERROR: malformed vector literal: "[1,2,3" LINE 1: SELECT '[1,2,3'::vector; ^ DETAIL: Unexpected end of input. SELECT '[1,2,3]9'::vector; -ERROR: malformed vector literal +ERROR: malformed vector literal: "[1,2,3]9" LINE 1: SELECT '[1,2,3]9'::vector; ^ DETAIL: Junk after closing right brace.