diff --git a/src/halfvec.c b/src/halfvec.c index 7aefdc1..b6173a1 100644 --- a/src/halfvec.c +++ b/src/halfvec.c @@ -731,9 +731,11 @@ Datum vector_to_halfvec(PG_FUNCTION_ARGS) { Vector *vec = PG_GETARG_VECTOR_P(0); + int32 typmod = PG_GETARG_INT32(1); HalfVector *result; CheckDim(vec->dim); + CheckExpectedDim(typmod, vec->dim); result = InitHalfVector(vec->dim); diff --git a/src/vector.c b/src/vector.c index f719a8f..1114932 100644 --- a/src/vector.c +++ b/src/vector.c @@ -541,9 +541,11 @@ Datum halfvec_to_vector(PG_FUNCTION_ARGS) { HalfVector *vec = PG_GETARG_HALFVEC_P(0); + int32 typmod = PG_GETARG_INT32(1); Vector *result; CheckDim(vec->dim); + CheckExpectedDim(typmod, vec->dim); result = InitVector(vec->dim); diff --git a/test/expected/cast.out b/test/expected/cast.out index f2e1ce7..5874714 100644 --- a/test/expected/cast.out +++ b/test/expected/cast.out @@ -58,6 +58,10 @@ SELECT '[1,2,3]'::halfvec::vector; [1,2,3] (1 row) +SELECT '[1,2,3]'::vector::halfvec(2); +ERROR: expected 2 dimensions, not 3 +SELECT '[1,2,3]'::halfvec::vector(2); +ERROR: expected 2 dimensions, not 3 SELECT '[1e-8]'::vector::halfvec; halfvec --------- diff --git a/test/sql/cast.sql b/test/sql/cast.sql index b86f4be..b85dadd 100644 --- a/test/sql/cast.sql +++ b/test/sql/cast.sql @@ -12,6 +12,8 @@ SELECT '{{1}}'::real[]::vector; SELECT '[1,2,3]'::vector::real[]; SELECT '[1,2,3]'::vector::halfvec; SELECT '[1,2,3]'::halfvec::vector; +SELECT '[1,2,3]'::vector::halfvec(2); +SELECT '[1,2,3]'::halfvec::vector(2); SELECT '[1e-8]'::vector::halfvec; SELECT array_agg(n)::vector FROM generate_series(1, 16001) n; SELECT array_to_vector(array_agg(n), 16001, false) FROM generate_series(1, 16001) n;