Fixed array to sparsevec cast not limiting to 16,000 non-zero elements [skip ci]

Co-authored-by: 0xJi3F
This commit is contained in:
Andrew Kane
2026-07-27 20:33:15 -07:00
parent 3e523434f4
commit 3566276bd4
4 changed files with 8 additions and 0 deletions

View File

@@ -1,3 +1,7 @@
## 0.8.6 (unreleased)
- Fixed array to `sparsevec` cast not limiting to 16,000 non-zero elements
## 0.8.5 (2026-07-08)
- Reduced memory usage for small tables for IVFFlat index builds

View File

@@ -745,6 +745,7 @@ array_to_sparsevec(PG_FUNCTION_ARGS)
errmsg("unsupported array type")));
}
CheckNnz(nnz, nelemsp);
result = InitSparseVector(nelemsp, nnz);
values = SPARSEVEC_VALUES(result);

View File

@@ -270,6 +270,8 @@ SELECT array_to_vector(array_agg(n), 16001, false) FROM generate_series(1, 16001
ERROR: vector cannot have more than 16000 dimensions
SELECT array_agg(n)::halfvec FROM generate_series(1, 16001) n;
ERROR: halfvec cannot have more than 16000 dimensions
SELECT array_agg(n)::sparsevec FROM generate_series(1, 16001) n;
ERROR: sparsevec cannot have more than 16000 non-zero elements
-- ensure no error
SELECT ARRAY[1,2,3] = ARRAY[1,2,3];
?column?

View File

@@ -77,6 +77,7 @@ SELECT '{{1}}'::real[]::sparsevec;
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;
SELECT array_agg(n)::halfvec FROM generate_series(1, 16001) n;
SELECT array_agg(n)::sparsevec FROM generate_series(1, 16001) n;
-- ensure no error
SELECT ARRAY[1,2,3] = ARRAY[1,2,3];