-- complain if script is sourced in psql, rather than via CREATE EXTENSION \echo Use "ALTER EXTENSION vector UPDATE TO '0.7.0'" to load this file. \quit CREATE TYPE halfvec; CREATE FUNCTION halfvec_in(cstring, oid, integer) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION halfvec_out(halfvec) RETURNS cstring AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION halfvec_typmod_in(cstring[]) RETURNS integer AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION halfvec_recv(internal, oid, integer) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION halfvec_send(halfvec) RETURNS bytea AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE TYPE halfvec ( INPUT = halfvec_in, OUTPUT = halfvec_out, TYPMOD_IN = halfvec_typmod_in, RECEIVE = halfvec_recv, SEND = halfvec_send, STORAGE = external ); CREATE FUNCTION l2_distance(halfvec, halfvec) RETURNS float8 AS 'MODULE_PATHNAME', 'halfvec_l2_distance' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION inner_product(halfvec, halfvec) RETURNS float8 AS 'MODULE_PATHNAME', 'halfvec_inner_product' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION cosine_distance(halfvec, halfvec) RETURNS float8 AS 'MODULE_PATHNAME', 'halfvec_cosine_distance' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION l1_distance(halfvec, halfvec) RETURNS float8 AS 'MODULE_PATHNAME', 'halfvec_l1_distance' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION halfvec_norm(halfvec) RETURNS float8 AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION halfvec_l2_squared_distance(halfvec, halfvec) RETURNS float8 AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION halfvec_negative_inner_product(halfvec, halfvec) RETURNS float8 AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION halfvec(halfvec, integer, boolean) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION array_to_halfvec(integer[], integer, boolean) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION array_to_halfvec(real[], integer, boolean) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION array_to_halfvec(double precision[], integer, boolean) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION array_to_halfvec(numeric[], integer, boolean) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION halfvec_to_float4(halfvec, integer, boolean) RETURNS real[] AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE CAST (halfvec AS halfvec) WITH FUNCTION halfvec(halfvec, integer, boolean) AS IMPLICIT; CREATE CAST (halfvec AS real[]) WITH FUNCTION halfvec_to_float4(halfvec, integer, boolean) AS IMPLICIT; CREATE CAST (integer[] AS halfvec) WITH FUNCTION array_to_halfvec(integer[], integer, boolean) AS ASSIGNMENT; CREATE CAST (real[] AS halfvec) WITH FUNCTION array_to_halfvec(real[], integer, boolean) AS ASSIGNMENT; CREATE CAST (double precision[] AS halfvec) WITH FUNCTION array_to_halfvec(double precision[], integer, boolean) AS ASSIGNMENT; CREATE CAST (numeric[] AS halfvec) WITH FUNCTION array_to_halfvec(numeric[], integer, boolean) AS ASSIGNMENT; CREATE OPERATOR <-> ( LEFTARG = halfvec, RIGHTARG = halfvec, PROCEDURE = l2_distance, COMMUTATOR = '<->' ); CREATE OPERATOR <#> ( LEFTARG = halfvec, RIGHTARG = halfvec, PROCEDURE = halfvec_negative_inner_product, COMMUTATOR = '<#>' ); CREATE OPERATOR <=> ( LEFTARG = halfvec, RIGHTARG = halfvec, PROCEDURE = cosine_distance, COMMUTATOR = '<=>' ); 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); 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); CREATE OPERATOR CLASS halfvec_cosine_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 2 halfvec_norm(halfvec); CREATE FUNCTION halfvec_to_vector(halfvec, integer, boolean) RETURNS vector AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE FUNCTION vector_to_halfvec(vector, integer, boolean) RETURNS halfvec AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE CAST (halfvec AS vector) WITH FUNCTION halfvec_to_vector(halfvec, integer, boolean) AS ASSIGNMENT; CREATE CAST (vector AS halfvec) WITH FUNCTION vector_to_halfvec(vector, integer, boolean) AS ASSIGNMENT;