diff --git a/sql/vector--0.6.2--0.7.0.sql b/sql/vector--0.6.2--0.7.0.sql index 4b1bb20..9d6bf8a 100644 --- a/sql/vector--0.6.2--0.7.0.sql +++ b/sql/vector--0.6.2--0.7.0.sql @@ -22,6 +22,24 @@ CREATE OPERATOR || ( LEFTARG = vector, RIGHTARG = vector, PROCEDURE = vector_concat ); +CREATE FUNCTION ivfflat_bit_support(internal) RETURNS internal + AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + +CREATE FUNCTION ivfflat_halfvec_support(internal) RETURNS internal + AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + +CREATE FUNCTION hnsw_bit_max_dims(internal) RETURNS internal + AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + +CREATE FUNCTION hnsw_halfvec_max_dims(internal) RETURNS internal + AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + +CREATE FUNCTION hnsw_sparsevec_max_dims(internal) RETURNS internal + AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + +CREATE FUNCTION hnsw_sparsevec_check_value(internal) RETURNS internal + AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + CREATE OPERATOR CLASS vector_l1_ops FOR TYPE vector USING hnsw AS OPERATOR 1 <+> (vector, vector) FOR ORDER BY float_ops, @@ -33,12 +51,6 @@ CREATE FUNCTION hamming_distance(bit, bit) RETURNS float8 CREATE FUNCTION jaccard_distance(bit, bit) RETURNS float8 AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; -CREATE FUNCTION ivfflat_bit_support(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; - -CREATE FUNCTION hnsw_bit_support(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; - CREATE OPERATOR <~> ( LEFTARG = bit, RIGHTARG = bit, PROCEDURE = hamming_distance, COMMUTATOR = '<~>' @@ -60,13 +72,13 @@ CREATE OPERATOR CLASS bit_hamming_ops FOR TYPE bit USING hnsw AS OPERATOR 1 <~> (bit, bit) FOR ORDER BY float_ops, FUNCTION 1 hamming_distance(bit, bit), - FUNCTION 4 hnsw_bit_support(internal); + FUNCTION 4 hnsw_bit_max_dims(internal); CREATE OPERATOR CLASS bit_jaccard_ops FOR TYPE bit USING hnsw AS OPERATOR 1 <%> (bit, bit) FOR ORDER BY float_ops, FUNCTION 1 jaccard_distance(bit, bit), - FUNCTION 4 hnsw_bit_support(internal); + FUNCTION 4 hnsw_bit_max_dims(internal); CREATE TYPE halfvec; @@ -169,12 +181,6 @@ CREATE FUNCTION halfvec_accum(double precision[], halfvec) RETURNS double precis CREATE FUNCTION halfvec_avg(double precision[]) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; -CREATE FUNCTION ivfflat_halfvec_support(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; - -CREATE FUNCTION hnsw_halfvec_support(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; - CREATE AGGREGATE avg(halfvec) ( SFUNC = halfvec_accum, STYPE = double precision[], @@ -352,13 +358,13 @@ CREATE OPERATOR CLASS halfvec_l2_ops FOR TYPE halfvec USING hnsw AS OPERATOR 1 <-> (halfvec, halfvec) FOR ORDER BY float_ops, FUNCTION 1 halfvec_l2_squared_distance(halfvec, halfvec), - FUNCTION 4 hnsw_halfvec_support(internal); + FUNCTION 4 hnsw_halfvec_max_dims(internal); CREATE OPERATOR CLASS halfvec_ip_ops FOR TYPE halfvec USING hnsw AS OPERATOR 1 <#> (halfvec, halfvec) FOR ORDER BY float_ops, FUNCTION 1 halfvec_negative_inner_product(halfvec, halfvec), - FUNCTION 4 hnsw_halfvec_support(internal); + FUNCTION 4 hnsw_halfvec_max_dims(internal); CREATE OPERATOR CLASS halfvec_cosine_ops FOR TYPE halfvec USING hnsw AS @@ -366,13 +372,13 @@ CREATE OPERATOR CLASS halfvec_cosine_ops FUNCTION 1 halfvec_negative_inner_product(halfvec, halfvec), FUNCTION 2 l2_norm(halfvec), FUNCTION 3 l2_normalize(halfvec), - FUNCTION 4 hnsw_halfvec_support(internal); + FUNCTION 4 hnsw_halfvec_max_dims(internal); CREATE OPERATOR CLASS halfvec_l1_ops FOR TYPE halfvec USING hnsw AS OPERATOR 1 <+> (halfvec, halfvec) FOR ORDER BY float_ops, FUNCTION 1 l1_distance(halfvec, halfvec), - FUNCTION 4 hnsw_halfvec_support(internal); + FUNCTION 4 hnsw_halfvec_max_dims(internal); CREATE TYPE sparsevec; @@ -460,9 +466,6 @@ CREATE FUNCTION halfvec_to_sparsevec(halfvec, integer, boolean) RETURNS sparseve CREATE FUNCTION sparsevec_to_halfvec(sparsevec, integer, boolean) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; -CREATE FUNCTION hnsw_sparsevec_support(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; - CREATE CAST (sparsevec AS sparsevec) WITH FUNCTION sparsevec(sparsevec, integer, boolean) AS IMPLICIT; @@ -547,13 +550,15 @@ CREATE OPERATOR CLASS sparsevec_l2_ops FOR TYPE sparsevec USING hnsw AS OPERATOR 1 <-> (sparsevec, sparsevec) FOR ORDER BY float_ops, FUNCTION 1 sparsevec_l2_squared_distance(sparsevec, sparsevec), - FUNCTION 4 hnsw_sparsevec_support(internal); + FUNCTION 4 hnsw_sparsevec_max_dims(internal), + FUNCTION 5 hnsw_sparsevec_check_value(internal); CREATE OPERATOR CLASS sparsevec_ip_ops FOR TYPE sparsevec USING hnsw AS OPERATOR 1 <#> (sparsevec, sparsevec) FOR ORDER BY float_ops, FUNCTION 1 sparsevec_negative_inner_product(sparsevec, sparsevec), - FUNCTION 4 hnsw_sparsevec_support(internal); + FUNCTION 4 hnsw_sparsevec_max_dims(internal), + FUNCTION 5 hnsw_sparsevec_check_value(internal); CREATE OPERATOR CLASS sparsevec_cosine_ops FOR TYPE sparsevec USING hnsw AS @@ -561,10 +566,12 @@ CREATE OPERATOR CLASS sparsevec_cosine_ops FUNCTION 1 sparsevec_negative_inner_product(sparsevec, sparsevec), FUNCTION 2 l2_norm(sparsevec), FUNCTION 3 l2_normalize(sparsevec), - FUNCTION 4 hnsw_sparsevec_support(internal); + FUNCTION 4 hnsw_sparsevec_max_dims(internal), + FUNCTION 5 hnsw_sparsevec_check_value(internal); CREATE OPERATOR CLASS sparsevec_l1_ops FOR TYPE sparsevec USING hnsw AS OPERATOR 1 <+> (sparsevec, sparsevec) FOR ORDER BY float_ops, FUNCTION 1 l1_distance(sparsevec, sparsevec), - FUNCTION 4 hnsw_sparsevec_support(internal); + FUNCTION 4 hnsw_sparsevec_max_dims(internal), + FUNCTION 5 hnsw_sparsevec_check_value(internal); diff --git a/sql/vector.sql b/sql/vector.sql index 2838d9d..07dd37f 100644 --- a/sql/vector.sql +++ b/sql/vector.sql @@ -261,6 +261,26 @@ CREATE ACCESS METHOD hnsw TYPE INDEX HANDLER hnswhandler; COMMENT ON ACCESS METHOD hnsw IS 'hnsw index access method'; +-- private access method functions + +CREATE FUNCTION ivfflat_bit_support(internal) RETURNS internal + AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + +CREATE FUNCTION ivfflat_halfvec_support(internal) RETURNS internal + AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + +CREATE FUNCTION hnsw_bit_max_dims(internal) RETURNS internal + AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + +CREATE FUNCTION hnsw_halfvec_max_dims(internal) RETURNS internal + AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + +CREATE FUNCTION hnsw_sparsevec_max_dims(internal) RETURNS internal + AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + +CREATE FUNCTION hnsw_sparsevec_check_value(internal) RETURNS internal + AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + -- vector opclasses CREATE OPERATOR CLASS vector_ops @@ -322,14 +342,6 @@ CREATE FUNCTION hamming_distance(bit, bit) RETURNS float8 CREATE FUNCTION jaccard_distance(bit, bit) RETURNS float8 AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; --- bit private functions - -CREATE FUNCTION ivfflat_bit_support(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; - -CREATE FUNCTION hnsw_bit_max_dims(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; - -- bit operators CREATE OPERATOR <~> ( @@ -470,12 +482,6 @@ CREATE FUNCTION halfvec_accum(double precision[], halfvec) RETURNS double precis CREATE FUNCTION halfvec_avg(double precision[]) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; -CREATE FUNCTION ivfflat_halfvec_support(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; - -CREATE FUNCTION hnsw_halfvec_max_dims(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; - -- halfvec aggregates CREATE AGGREGATE avg(halfvec) ( @@ -779,12 +785,6 @@ CREATE FUNCTION halfvec_to_sparsevec(halfvec, integer, boolean) RETURNS sparseve CREATE FUNCTION sparsevec_to_halfvec(sparsevec, integer, boolean) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; -CREATE FUNCTION hnsw_sparsevec_max_dims(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; - -CREATE FUNCTION hnsw_sparsevec_check_value(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; - -- sparsevec casts CREATE CAST (sparsevec AS sparsevec)