pgvector.git / summary / log / commit / refs
commit a0c7f618ff32ce565be20c010d65a7d2b373d528
Author: Andrew Kane <andrew@ankane.org>
Date: Sun Jul 16 22:30:03 2023 +0000
Simplified sum aggregate
sql/vector--0.4.4--0.5.0.sql | 11 +++--------
sql/vector.sql | 11 +++--------
src/vector.c | 39 ---------------------------------------
test/expected/functions.out | 4 +---
test/sql/functions.sql | 1 -
5 files changed, 7 insertions(+), 59 deletions(-)
diff --git a/sql/vector--0.4.4--0.5.0.sql b/sql/vector--0.4.4--0.5.0.sql
index 1521589c..3fe33652 100644
--- a/sql/vector--0.4.4--0.5.0.sql
+++ b/sql/vector--0.4.4--0.5.0.sql
@@ -12,14 +12,9 @@ CREATE OPERATOR * (
COMMUTATOR = *
);
-CREATE FUNCTION vector_sum(double precision[]) RETURNS vector
- AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
-
CREATE AGGREGATE sum(vector) (
- SFUNC = vector_accum,
- STYPE = double precision[],
- FINALFUNC = vector_sum,
- COMBINEFUNC = vector_combine,
- INITCOND = '{0}',
+ SFUNC = vector_add,
+ STYPE = vector,
+ COMBINEFUNC = vector_add,
PARALLEL = SAFE
);
diff --git a/sql/vector.sql b/sql/vector.sql
index 55f830be..91f594ce 100644
--- a/sql/vector.sql
+++ b/sql/vector.sql
@@ -99,9 +99,6 @@ CREATE FUNCTION vector_avg(double precision[]) RETURNS vector
CREATE FUNCTION vector_combine(double precision[], double precision[]) RETURNS double precision[]
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
-CREATE FUNCTION vector_sum(double precision[]) RETURNS vector
- AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
-
-- aggregates
CREATE AGGREGATE avg(vector) (
@@ -114,11 +111,9 @@ CREATE AGGREGATE avg(vector) (
);
CREATE AGGREGATE sum(vector) (
- SFUNC = vector_accum,
- STYPE = double precision[],
- FINALFUNC = vector_sum,
- COMBINEFUNC = vector_combine,
- INITCOND = '{0}',
+ SFUNC = vector_add,
+ STYPE = vector,
+ COMBINEFUNC = vector_add,
PARALLEL = SAFE
);
diff --git a/src/vector.c b/src/vector.c
index 5cecf7ef..e9a151e2 100644
--- a/src/vector.c
+++ b/src/vector.c
@@ -1090,42 +1090,3 @@ vector_avg(PG_FUNCTION_ARGS)
PG_RETURN_POINTER(result);
}
-
-/*
- * Sum vectors
- */
-PGDLLEXPORT PG_FUNCTION_INFO_V1(vector_sum);
-Datum
-vector_sum(PG_FUNCTION_ARGS)
-{
- ArrayType *statearray = PG_GETARG_ARRAYTYPE_P(0);
- float8 *statevalues;
- float8 n;
- uint16 dim;
- Vector *result;
-
- /* Check array before using */
- statevalues = CheckStateArray(statearray, "vector_sum");
- n = statevalues[0];
-
- /* SQL defines AVG of no values to be NULL */
- if (n == 0.0)
- PG_RETURN_NULL();
-
- /* Create vector */
- dim = STATE_DIMS(statearray);
- CheckDim(dim);
- result = InitVector(dim);
- for (int i = 0; i < dim; i++)
- {
- result->x[i] = statevalues[i + 1];
-
- /* Check for overflow */
- if (isinf(result->x[i]))
- float_overflow_error();
-
- CheckElement(result->x[i]);
- }
-
- PG_RETURN_POINTER(result);
-}
diff --git a/test/expected/functions.out b/test/expected/functions.out
index 86562b22..46bb8fef 100644
--- a/test/expected/functions.out
+++ b/test/expected/functions.out
@@ -157,8 +157,6 @@ SELECT sum(v) FROM unnest(ARRAY[]::vector[]) v;
(1 row)
SELECT sum(v) FROM unnest(ARRAY['[1,2]'::vector, '[3]']) v;
-ERROR: expected 2 dimensions, not 1
+ERROR: different vector dimensions 2 and 1
SELECT sum(v) FROM unnest(ARRAY['[3e38]'::vector, '[3e38]']) v;
ERROR: value out of range: overflow
-SELECT vector_sum(array_agg(n)) FROM generate_series(1, 16002) n;
-ERROR: vector cannot have more than 16000 dimensions
diff --git a/test/sql/functions.sql b/test/sql/functions.sql
index e1c5a422..fa297171 100644
--- a/test/sql/functions.sql
+++ b/test/sql/functions.sql
@@ -41,4 +41,3 @@ SELECT sum(v) FROM unnest(ARRAY['[1,2,3]'::vector, '[3,5,7]', NULL]) v;
SELECT sum(v) FROM unnest(ARRAY[]::vector[]) v;
SELECT sum(v) FROM unnest(ARRAY['[1,2]'::vector, '[3]']) v;
SELECT sum(v) FROM unnest(ARRAY['[3e38]'::vector, '[3e38]']) v;
-SELECT vector_sum(array_agg(n)) FROM generate_series(1, 16002) n;
[parent: f9d9d64a4e22]