mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-12 15:46:54 +08:00
Added sum for half vectors
This commit is contained in:
@@ -907,6 +907,7 @@ subvector(halfvec, integer, integer) → halfvec | subvector | unreleased
|
|||||||
Function | Description | Added
|
Function | Description | Added
|
||||||
--- | --- | ---
|
--- | --- | ---
|
||||||
avg(halfvec) → halfvec | average | unreleased
|
avg(halfvec) → halfvec | average | unreleased
|
||||||
|
sum(halfvec) → halfvec | sum | unreleased
|
||||||
|
|
||||||
### Bit Type
|
### Bit Type
|
||||||
|
|
||||||
|
|||||||
@@ -137,6 +137,13 @@ CREATE AGGREGATE avg(halfvec) (
|
|||||||
PARALLEL = SAFE
|
PARALLEL = SAFE
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE AGGREGATE sum(halfvec) (
|
||||||
|
SFUNC = halfvec_add,
|
||||||
|
STYPE = halfvec,
|
||||||
|
COMBINEFUNC = halfvec_add,
|
||||||
|
PARALLEL = SAFE
|
||||||
|
);
|
||||||
|
|
||||||
CREATE FUNCTION halfvec(halfvec, integer, boolean) RETURNS halfvec
|
CREATE FUNCTION halfvec(halfvec, integer, boolean) RETURNS halfvec
|
||||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||||
|
|
||||||
|
|||||||
@@ -434,6 +434,13 @@ CREATE AGGREGATE avg(halfvec) (
|
|||||||
PARALLEL = SAFE
|
PARALLEL = SAFE
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE AGGREGATE sum(halfvec) (
|
||||||
|
SFUNC = halfvec_add,
|
||||||
|
STYPE = halfvec,
|
||||||
|
COMBINEFUNC = halfvec_add,
|
||||||
|
PARALLEL = SAFE
|
||||||
|
);
|
||||||
|
|
||||||
-- halfvec cast functions
|
-- halfvec cast functions
|
||||||
|
|
||||||
CREATE FUNCTION halfvec(halfvec, integer, boolean) RETURNS halfvec
|
CREATE FUNCTION halfvec(halfvec, integer, boolean) RETURNS halfvec
|
||||||
|
|||||||
@@ -348,3 +348,25 @@ SELECT avg(v) FROM unnest(ARRAY['[65504]'::halfvec, '[65504]']) v;
|
|||||||
|
|
||||||
SELECT halfvec_avg(array_agg(n)) FROM generate_series(1, 16002) n;
|
SELECT halfvec_avg(array_agg(n)) FROM generate_series(1, 16002) n;
|
||||||
ERROR: halfvec cannot have more than 16000 dimensions
|
ERROR: halfvec cannot have more than 16000 dimensions
|
||||||
|
SELECT sum(v) FROM unnest(ARRAY['[1,2,3]'::halfvec, '[3,5,7]']) v;
|
||||||
|
sum
|
||||||
|
----------
|
||||||
|
[4,7,10]
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT sum(v) FROM unnest(ARRAY['[1,2,3]'::halfvec, '[3,5,7]', NULL]) v;
|
||||||
|
sum
|
||||||
|
----------
|
||||||
|
[4,7,10]
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT sum(v) FROM unnest(ARRAY[]::halfvec[]) v;
|
||||||
|
sum
|
||||||
|
-----
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT sum(v) FROM unnest(ARRAY['[1,2]'::halfvec, '[3]']) v;
|
||||||
|
ERROR: different halfvec dimensions 2 and 1
|
||||||
|
SELECT sum(v) FROM unnest(ARRAY['[65504]'::halfvec, '[65504]']) v;
|
||||||
|
ERROR: value out of range: overflow
|
||||||
|
|||||||
@@ -76,3 +76,9 @@ SELECT avg(v) FROM unnest(ARRAY[]::halfvec[]) v;
|
|||||||
SELECT avg(v) FROM unnest(ARRAY['[1,2]'::halfvec, '[3]']) v;
|
SELECT avg(v) FROM unnest(ARRAY['[1,2]'::halfvec, '[3]']) v;
|
||||||
SELECT avg(v) FROM unnest(ARRAY['[65504]'::halfvec, '[65504]']) v;
|
SELECT avg(v) FROM unnest(ARRAY['[65504]'::halfvec, '[65504]']) v;
|
||||||
SELECT halfvec_avg(array_agg(n)) FROM generate_series(1, 16002) n;
|
SELECT halfvec_avg(array_agg(n)) FROM generate_series(1, 16002) n;
|
||||||
|
|
||||||
|
SELECT sum(v) FROM unnest(ARRAY['[1,2,3]'::halfvec, '[3,5,7]']) v;
|
||||||
|
SELECT sum(v) FROM unnest(ARRAY['[1,2,3]'::halfvec, '[3,5,7]', NULL]) v;
|
||||||
|
SELECT sum(v) FROM unnest(ARRAY[]::halfvec[]) v;
|
||||||
|
SELECT sum(v) FROM unnest(ARRAY['[1,2]'::halfvec, '[3]']) v;
|
||||||
|
SELECT sum(v) FROM unnest(ARRAY['[65504]'::halfvec, '[65504]']) v;
|
||||||
|
|||||||
Reference in New Issue
Block a user