mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-10 14:46:56 +08:00
Added cast for numeric[]
This commit is contained in:
@@ -1,3 +1,7 @@
|
|||||||
|
## 0.1.7 (unreleased)
|
||||||
|
|
||||||
|
- Added cast for `numeric[]`
|
||||||
|
|
||||||
## 0.1.6 (2021-06-09)
|
## 0.1.6 (2021-06-09)
|
||||||
|
|
||||||
- Fixed segmentation fault with `COUNT`
|
- Fixed segmentation fault with `COUNT`
|
||||||
|
|||||||
8
sql/vector--0.1.6--0.1.7.sql
Normal file
8
sql/vector--0.1.6--0.1.7.sql
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
||||||
|
\echo Use "ALTER EXTENSION vector UPDATE TO '0.1.6'" to load this file. \quit
|
||||||
|
|
||||||
|
CREATE FUNCTION array_to_vector(numeric[], integer, boolean) RETURNS vector
|
||||||
|
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||||
|
|
||||||
|
CREATE CAST (numeric[] AS vector)
|
||||||
|
WITH FUNCTION array_to_vector(numeric[], integer, boolean) AS IMPLICIT;
|
||||||
@@ -97,6 +97,9 @@ CREATE FUNCTION array_to_vector(real[], integer, boolean) RETURNS vector
|
|||||||
CREATE FUNCTION array_to_vector(double precision[], integer, boolean) RETURNS vector
|
CREATE FUNCTION array_to_vector(double precision[], integer, boolean) RETURNS vector
|
||||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||||
|
|
||||||
|
CREATE FUNCTION array_to_vector(numeric[], integer, boolean) RETURNS vector
|
||||||
|
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||||
|
|
||||||
-- casts
|
-- casts
|
||||||
|
|
||||||
CREATE CAST (vector AS vector)
|
CREATE CAST (vector AS vector)
|
||||||
@@ -111,6 +114,9 @@ CREATE CAST (real[] AS vector)
|
|||||||
CREATE CAST (double precision[] AS vector)
|
CREATE CAST (double precision[] AS vector)
|
||||||
WITH FUNCTION array_to_vector(double precision[], integer, boolean) AS IMPLICIT;
|
WITH FUNCTION array_to_vector(double precision[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (numeric[] AS vector)
|
||||||
|
WITH FUNCTION array_to_vector(numeric[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
-- operators
|
-- operators
|
||||||
|
|
||||||
CREATE OPERATOR <-> (
|
CREATE OPERATOR <-> (
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#include "utils/array.h"
|
#include "utils/array.h"
|
||||||
#include "utils/builtins.h"
|
#include "utils/builtins.h"
|
||||||
#include "utils/lsyscache.h"
|
#include "utils/lsyscache.h"
|
||||||
|
#include "utils/numeric.h"
|
||||||
|
|
||||||
#if PG_VERSION_NUM >= 120000
|
#if PG_VERSION_NUM >= 120000
|
||||||
#include "utils/float.h"
|
#include "utils/float.h"
|
||||||
@@ -345,6 +346,8 @@ array_to_vector(PG_FUNCTION_ARGS)
|
|||||||
result->x[i] = DatumGetFloat8(elemsp[i]);
|
result->x[i] = DatumGetFloat8(elemsp[i]);
|
||||||
else if (ARR_ELEMTYPE(array) == FLOAT4OID)
|
else if (ARR_ELEMTYPE(array) == FLOAT4OID)
|
||||||
result->x[i] = DatumGetFloat4(elemsp[i]);
|
result->x[i] = DatumGetFloat4(elemsp[i]);
|
||||||
|
else if (ARR_ELEMTYPE(array) == NUMERICOID)
|
||||||
|
result->x[i] = DatumGetFloat4(DirectFunctionCall1(numeric_float4, NumericGetDatum(elemsp[i])));
|
||||||
else
|
else
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_DATA_EXCEPTION),
|
(errcode(ERRCODE_DATA_EXCEPTION),
|
||||||
|
|||||||
@@ -6,6 +6,12 @@ SELECT ARRAY[1,2,3]::vector;
|
|||||||
[1,2,3]
|
[1,2,3]
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
SELECT ARRAY[1.0,2.0,3.0]::vector;
|
||||||
|
array
|
||||||
|
---------
|
||||||
|
[1,2,3]
|
||||||
|
(1 row)
|
||||||
|
|
||||||
SELECT ARRAY[1,2,3]::float4[]::vector;
|
SELECT ARRAY[1,2,3]::float4[]::vector;
|
||||||
array
|
array
|
||||||
---------
|
---------
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ SET client_min_messages = warning;
|
|||||||
CREATE EXTENSION IF NOT EXISTS vector;
|
CREATE EXTENSION IF NOT EXISTS vector;
|
||||||
|
|
||||||
SELECT ARRAY[1,2,3]::vector;
|
SELECT ARRAY[1,2,3]::vector;
|
||||||
|
SELECT ARRAY[1.0,2.0,3.0]::vector;
|
||||||
SELECT ARRAY[1,2,3]::float4[]::vector;
|
SELECT ARRAY[1,2,3]::float4[]::vector;
|
||||||
SELECT ARRAY[1,2,3]::float8[]::vector;
|
SELECT ARRAY[1,2,3]::float8[]::vector;
|
||||||
SELECT '{NULL}'::real[]::vector;
|
SELECT '{NULL}'::real[]::vector;
|
||||||
|
|||||||
Reference in New Issue
Block a user