mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-12 15:46:54 +08:00
Improved error messages for halfvec input [skip ci]
This commit is contained in:
@@ -435,6 +435,8 @@ halfvec_in(PG_FUNCTION_ARGS)
|
|||||||
|
|
||||||
while (pt != NULL && *stringEnd != ']')
|
while (pt != NULL && *stringEnd != ']')
|
||||||
{
|
{
|
||||||
|
float val;
|
||||||
|
|
||||||
if (dim == HALFVEC_MAX_DIM)
|
if (dim == HALFVEC_MAX_DIM)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
|
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
|
||||||
@@ -450,15 +452,24 @@ halfvec_in(PG_FUNCTION_ARGS)
|
|||||||
errmsg("invalid input syntax for type halfvec: \"%s\"", lit)));
|
errmsg("invalid input syntax for type halfvec: \"%s\"", lit)));
|
||||||
|
|
||||||
/* Use strtof like float4in to avoid a double-rounding problem */
|
/* Use strtof like float4in to avoid a double-rounding problem */
|
||||||
x[dim] = Float4ToHalf(strtof(pt, &stringEnd));
|
errno = 0;
|
||||||
CheckElement(x[dim]);
|
val = strtof(pt, &stringEnd);
|
||||||
dim++;
|
|
||||||
|
|
||||||
if (stringEnd == pt)
|
if (stringEnd == pt)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
|
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
|
||||||
errmsg("invalid input syntax for type halfvec: \"%s\"", lit)));
|
errmsg("invalid input syntax for type halfvec: \"%s\"", lit)));
|
||||||
|
|
||||||
|
x[dim] = Float4ToHalfUnchecked(val);
|
||||||
|
|
||||||
|
if ((errno == ERANGE && isinf(val)) || (HalfIsInf(x[dim]) && !isinf(val)) || (HalfIsZero(x[dim]) && val != 0))
|
||||||
|
ereport(ERROR,
|
||||||
|
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
|
||||||
|
errmsg("\"%s\" is out of range for type halfvec", pt)));
|
||||||
|
|
||||||
|
CheckElement(x[dim]);
|
||||||
|
dim++;
|
||||||
|
|
||||||
while (halfvec_isspace(*stringEnd))
|
while (halfvec_isspace(*stringEnd))
|
||||||
stringEnd++;
|
stringEnd++;
|
||||||
|
|
||||||
|
|||||||
@@ -51,15 +51,15 @@ SELECT '[65519,-65519]'::halfvec;
|
|||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT '[65520,-65520]'::halfvec;
|
SELECT '[65520,-65520]'::halfvec;
|
||||||
ERROR: value out of range: overflow
|
ERROR: "65520" is out of range for type halfvec
|
||||||
LINE 1: SELECT '[65520,-65520]'::halfvec;
|
LINE 1: SELECT '[65520,-65520]'::halfvec;
|
||||||
^
|
^
|
||||||
SELECT '[1e-8,-1e-8]'::halfvec;
|
SELECT '[1e-8,-1e-8]'::halfvec;
|
||||||
ERROR: value out of range: underflow
|
ERROR: "1e-8" is out of range for type halfvec
|
||||||
LINE 1: SELECT '[1e-8,-1e-8]'::halfvec;
|
LINE 1: SELECT '[1e-8,-1e-8]'::halfvec;
|
||||||
^
|
^
|
||||||
SELECT '[4e38,1]'::halfvec;
|
SELECT '[4e38,1]'::halfvec;
|
||||||
ERROR: infinite value not allowed in halfvec
|
ERROR: "4e38" is out of range for type halfvec
|
||||||
LINE 1: SELECT '[4e38,1]'::halfvec;
|
LINE 1: SELECT '[4e38,1]'::halfvec;
|
||||||
^
|
^
|
||||||
SELECT '[1,2,3'::halfvec;
|
SELECT '[1,2,3'::halfvec;
|
||||||
|
|||||||
Reference in New Issue
Block a user