pgvector.git / summary / log / commit / refs
commit 2b939edfee17acf245cd28a1f3f3ea35b3b76005
Author: Andrew Kane <andrew@ankane.org>
Date: Sun Jun 11 16:24:11 2023 +0000
Improved error message for malformed vector literal - #153
CHANGELOG.md | 4 ++++
src/vector.c | 9 ++++++---
test/expected/input.out | 4 ++--
3 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a07397c7..524c89a4 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 da51d929..be194ebf 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 b6ccca4b..d2cb1c6a 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.
[parent: 987026a55909]