You've already forked pgvecto.rs
mirror of
https://github.com/tensorchord/pgvecto.rs.git
synced 2025-08-07 03:22:55 +03:00
fix: upgrade instructions (#203)
* fix: upgrade instructions Signed-off-by: usamoi <usamoi@outlook.com> * fix: rename scripts to install Signed-off-by: usamoi <usamoi@outlook.com> * fix: ipc error-handling Signed-off-by: usamoi <usamoi@outlook.com> * feat: soft version Signed-off-by: usamoi <usamoi@outlook.com> * chore: freebsd Signed-off-by: usamoi <usamoi@outlook.com> --------- Signed-off-by: usamoi <usamoi@outlook.com>
This commit is contained in:
10
.github/workflows/release.yml
vendored
10
.github/workflows/release.yml
vendored
@@ -99,7 +99,7 @@ jobs:
|
|||||||
sudo apt-get -y install ruby-dev libarchive-tools
|
sudo apt-get -y install ruby-dev libarchive-tools
|
||||||
sudo gem install --no-document fpm
|
sudo gem install --no-document fpm
|
||||||
mkdir ./artifacts
|
mkdir ./artifacts
|
||||||
cargo pgrx package
|
./ci_package.sh
|
||||||
if [[ "${{ matrix.arch }}" == "aarch64" ]]; then
|
if [[ "${{ matrix.arch }}" == "aarch64" ]]; then
|
||||||
cargo build --target aarch64-unknown-linux-gnu --release --features "pg${{ matrix.version }}" --no-default-features
|
cargo build --target aarch64-unknown-linux-gnu --release --features "pg${{ matrix.version }}" --no-default-features
|
||||||
mv ./target/aarch64-unknown-linux-gnu/release/libvectors.so ./target/release/vectors-pg${{ matrix.version }}/usr/lib/postgresql/${{ matrix.version }}/lib/vectors.so
|
mv ./target/aarch64-unknown-linux-gnu/release/libvectors.so ./target/release/vectors-pg${{ matrix.version }}/usr/lib/postgresql/${{ matrix.version }}/lib/vectors.so
|
||||||
@@ -116,6 +116,8 @@ jobs:
|
|||||||
--package ../vectors-pg${{ matrix.version }}_${{ github.event.inputs.version }}_${{ matrix.platform }}.deb \
|
--package ../vectors-pg${{ matrix.version }}_${{ github.event.inputs.version }}_${{ matrix.platform }}.deb \
|
||||||
--architecture ${{ matrix.platform }} \
|
--architecture ${{ matrix.platform }} \
|
||||||
.
|
.
|
||||||
|
env:
|
||||||
|
VERSION: ${{ matrix.version }}
|
||||||
- name: Upload Release
|
- name: Upload Release
|
||||||
uses: actions/upload-release-asset@v1
|
uses: actions/upload-release-asset@v1
|
||||||
env:
|
env:
|
||||||
@@ -167,9 +169,9 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- { version: 14, latest: false }
|
- { version: 14 }
|
||||||
- { version: 15, latest: false }
|
- { version: 15 }
|
||||||
- { version: 16, latest: true }
|
- { version: 16 }
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
@@ -49,7 +49,7 @@ docker run \
|
|||||||
--name pgvecto-rs-demo \
|
--name pgvecto-rs-demo \
|
||||||
-e POSTGRES_PASSWORD=mysecretpassword \
|
-e POSTGRES_PASSWORD=mysecretpassword \
|
||||||
-p 5432:5432 \
|
-p 5432:5432 \
|
||||||
-d tensorchord/pgvecto-rs:pg16-latest
|
-d tensorchord/pgvecto-rs:pg16-v0.1.13
|
||||||
```
|
```
|
||||||
|
|
||||||
## Development with envd
|
## Development with envd
|
||||||
|
@@ -2,7 +2,7 @@ fn main() {
|
|||||||
println!("cargo:rerun-if-changed=src/c.h");
|
println!("cargo:rerun-if-changed=src/c.h");
|
||||||
println!("cargo:rerun-if-changed=src/c.c");
|
println!("cargo:rerun-if-changed=src/c.c");
|
||||||
cc::Build::new()
|
cc::Build::new()
|
||||||
.compiler("/usr/bin/clang-16")
|
.compiler("clang-16")
|
||||||
.file("./src/c.c")
|
.file("./src/c.c")
|
||||||
.opt_level(3)
|
.opt_level(3)
|
||||||
.debug(true)
|
.debug(true)
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
#![feature(linkage)]
|
|
||||||
|
|
||||||
mod c;
|
mod c;
|
||||||
|
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
|
@@ -62,15 +62,29 @@ The given vector is invalid for input.
|
|||||||
ADVICE: Check if dimensions and scalar type of the vector is matched with the index.\
|
ADVICE: Check if dimensions and scalar type of the vector is matched with the index.\
|
||||||
")]
|
")]
|
||||||
Unmatched2,
|
Unmatched2,
|
||||||
|
#[error("\
|
||||||
|
IPC connection is closed unexpected.
|
||||||
|
ADVICE: The error is raisen by background worker errors. \
|
||||||
|
Please check the full PostgreSQL log to get more information.\
|
||||||
|
")]
|
||||||
|
Ipc,
|
||||||
|
#[error("\
|
||||||
|
The extension is upgraded. However, the index files is outdated.
|
||||||
|
ADVICE: Please read `https://github.com/tensorchord/pgvecto.rs/blob/main/docs/upgrade.md`.\
|
||||||
|
")]
|
||||||
|
Upgrade,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait FriendlyErrorLike {
|
pub trait FriendlyErrorLike: Sized {
|
||||||
fn friendly(self) -> !;
|
fn convert(self) -> FriendlyError;
|
||||||
|
fn friendly(self) -> ! {
|
||||||
|
panic!("pgvecto.rs: {}", self.convert());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FriendlyErrorLike for FriendlyError {
|
impl FriendlyErrorLike for FriendlyError {
|
||||||
fn friendly(self) -> ! {
|
fn convert(self) -> FriendlyError {
|
||||||
panic!("pgvecto.rs: {}", self);
|
self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
46
crates/service/src/worker/metadata.rs
Normal file
46
crates/service/src/worker/metadata.rs
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use std::error::Error;
|
||||||
|
use std::path::Path;
|
||||||
|
use thiserror::Error;
|
||||||
|
|
||||||
|
#[derive(Debug, Error)]
|
||||||
|
pub enum MetadataError {
|
||||||
|
#[error("Invalid version.")]
|
||||||
|
InvalidVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
pub struct Metadata {
|
||||||
|
#[serde(default)]
|
||||||
|
pub version: Option<u64>,
|
||||||
|
#[serde(default)]
|
||||||
|
pub soft_version: Option<u64>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Metadata {
|
||||||
|
const VERSION: u64 = 1;
|
||||||
|
const SOFT_VERSION: u64 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Metadata {
|
||||||
|
pub fn write(path: impl AsRef<Path>) {
|
||||||
|
let metadata = Metadata {
|
||||||
|
version: Some(Self::VERSION),
|
||||||
|
soft_version: Some(Self::SOFT_VERSION),
|
||||||
|
};
|
||||||
|
let contents = serde_json::to_string(&metadata).unwrap();
|
||||||
|
std::fs::write(path, contents).unwrap();
|
||||||
|
}
|
||||||
|
pub fn read(path: impl AsRef<Path>) -> Result<(), Box<dyn Error>> {
|
||||||
|
use MetadataError::*;
|
||||||
|
let contents = std::fs::read_to_string(path)?;
|
||||||
|
let metadata = serde_json::from_str::<Metadata>(&contents)?;
|
||||||
|
if Self::VERSION != metadata.version.ok_or(InvalidVersion)? {
|
||||||
|
return Err(Box::new(InvalidVersion));
|
||||||
|
}
|
||||||
|
if Self::SOFT_VERSION <= metadata.soft_version.ok_or(InvalidVersion)? {
|
||||||
|
return Err(Box::new(InvalidVersion));
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
@@ -1,4 +1,5 @@
|
|||||||
pub mod instance;
|
pub mod instance;
|
||||||
|
pub mod metadata;
|
||||||
|
|
||||||
use self::instance::Instance;
|
use self::instance::Instance;
|
||||||
use crate::index::IndexOptions;
|
use crate::index::IndexOptions;
|
||||||
@@ -16,14 +17,6 @@ use std::collections::HashMap;
|
|||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
fn magic() -> &'static [u8] {
|
|
||||||
&[1, 4, 53, 23, 34, 92, 34, 23]
|
|
||||||
}
|
|
||||||
|
|
||||||
fn check(data: &[u8]) -> bool {
|
|
||||||
magic() == data
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct Worker {
|
pub struct Worker {
|
||||||
path: PathBuf,
|
path: PathBuf,
|
||||||
protect: Mutex<WorkerProtect>,
|
protect: Mutex<WorkerProtect>,
|
||||||
@@ -33,7 +26,6 @@ pub struct Worker {
|
|||||||
impl Worker {
|
impl Worker {
|
||||||
pub fn create(path: PathBuf) -> Arc<Self> {
|
pub fn create(path: PathBuf) -> Arc<Self> {
|
||||||
std::fs::create_dir(&path).unwrap();
|
std::fs::create_dir(&path).unwrap();
|
||||||
std::fs::write(path.join("magic"), magic()).unwrap();
|
|
||||||
std::fs::create_dir(path.join("indexes")).unwrap();
|
std::fs::create_dir(path.join("indexes")).unwrap();
|
||||||
let startup = FileAtomic::create(path.join("startup"), WorkerStartup::new());
|
let startup = FileAtomic::create(path.join("startup"), WorkerStartup::new());
|
||||||
let indexes = HashMap::new();
|
let indexes = HashMap::new();
|
||||||
@@ -42,17 +34,18 @@ impl Worker {
|
|||||||
});
|
});
|
||||||
let protect = WorkerProtect { startup, indexes };
|
let protect = WorkerProtect { startup, indexes };
|
||||||
sync_dir(&path);
|
sync_dir(&path);
|
||||||
|
self::metadata::Metadata::write(path.join("metadata"));
|
||||||
Arc::new(Worker {
|
Arc::new(Worker {
|
||||||
path,
|
path,
|
||||||
protect: Mutex::new(protect),
|
protect: Mutex::new(protect),
|
||||||
view: ArcSwap::new(view),
|
view: ArcSwap::new(view),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
pub fn check(path: PathBuf) -> bool {
|
||||||
|
self::metadata::Metadata::read(path.join("metadata")).is_ok()
|
||||||
|
}
|
||||||
pub fn open(path: PathBuf) -> Arc<Self> {
|
pub fn open(path: PathBuf) -> Arc<Self> {
|
||||||
let startup = FileAtomic::<WorkerStartup>::open(path.join("startup"));
|
let startup = FileAtomic::<WorkerStartup>::open(path.join("startup"));
|
||||||
if !check(&std::fs::read(path.join("magic")).unwrap_or_default()) {
|
|
||||||
panic!("Please delete the directory pg_vectors in Postgresql data folder. The files are created by older versions of postgresql or broken.");
|
|
||||||
}
|
|
||||||
clean(
|
clean(
|
||||||
path.join("indexes"),
|
path.join("indexes"),
|
||||||
startup.get().indexes.keys().map(|s| s.to_string()),
|
startup.get().indexes.keys().map(|s| s.to_string()),
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
We have prebuild image at [tensorchord/pgvecto-rs](https://hub.docker.com/r/tensorchord/pgvecto-rs). You can try it with
|
We have prebuild image at [tensorchord/pgvecto-rs](https://hub.docker.com/r/tensorchord/pgvecto-rs). You can try it with
|
||||||
|
|
||||||
```
|
```
|
||||||
docker run --name pgvecto-rs-demo -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d tensorchord/pgvecto-rs:pg16-latest
|
docker run --name pgvecto-rs-demo -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d tensorchord/pgvecto-rs:pg16-v0.1.13
|
||||||
```
|
```
|
||||||
|
|
||||||
Connect to the database and enable the extension.
|
Connect to the database and enable the extension.
|
||||||
|
51
docs/upgrade.md
Normal file
51
docs/upgrade.md
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# Upgrade
|
||||||
|
|
||||||
|
## `The extension is upgraded. However, the index files is outdated.`
|
||||||
|
|
||||||
|
You may see this error if you upgrade the extension. On this condition, you should follow these steps:
|
||||||
|
|
||||||
|
* Delete the old index folder.
|
||||||
|
|
||||||
|
You can delete the folder with this command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
rm -rf $(psql -U postgres -tAqX -c $'SELECT CONCAT(CURRENT_SETTING(\'data_directory\'), \'/pg_vectors\');')
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are using Docker, you can just delete `pg_vectors` folder under the volume directory too.
|
||||||
|
|
||||||
|
You need to restart PostgreSQL.
|
||||||
|
|
||||||
|
* Reindex.
|
||||||
|
|
||||||
|
You can list all indexes that needed to be reindexed with this command:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT
|
||||||
|
I.oid AS indexrelid,
|
||||||
|
I.relname AS indexname
|
||||||
|
FROM pg_index X
|
||||||
|
JOIN pg_class I ON I.oid = X.indexrelid
|
||||||
|
JOIN pg_am A ON A.oid = I.relam
|
||||||
|
WHERE A.amname = 'vectors';
|
||||||
|
```
|
||||||
|
|
||||||
|
If you get the result like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
indexrelid | indexname
|
||||||
|
------------+------------
|
||||||
|
17988 | t_val_idx
|
||||||
|
17989 | t_val_idx1
|
||||||
|
17990 | t_val_idx2
|
||||||
|
17991 | t_val_idx3
|
||||||
|
```
|
||||||
|
|
||||||
|
You will reindex them with this SQL:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
REINDEX INDEX t_val_idx;
|
||||||
|
REINDEX INDEX t_val_idx1;
|
||||||
|
REINDEX INDEX t_val_idx2;
|
||||||
|
REINDEX INDEX t_val_idx3;
|
||||||
|
```
|
4
scripts/ci_package.sh
Executable file
4
scripts/ci_package.sh
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cargo pgrx package
|
371
sql/install/vectors--0.1.0.sql
Normal file
371
sql/install/vectors--0.1.0.sql
Normal file
@@ -0,0 +1,371 @@
|
|||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- src/lib.rs:24
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:639
|
||||||
|
-- vectors::postgres::index::vectors_unload
|
||||||
|
CREATE FUNCTION "vectors_unload"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS void
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vectors_unload_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:633
|
||||||
|
-- vectors::postgres::index::vectors_load
|
||||||
|
CREATE FUNCTION "vectors_load"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS void
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vectors_load_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:424
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_out
|
||||||
|
CREATE FUNCTION "vector_typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:411
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_in
|
||||||
|
CREATE FUNCTION "vector_typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:397
|
||||||
|
-- vectors::postgres::datatype::vector_out
|
||||||
|
CREATE FUNCTION "vector_out"(
|
||||||
|
"vector" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:349
|
||||||
|
-- vectors::postgres::datatype::vector_in
|
||||||
|
CREATE FUNCTION "vector_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_in_wrapper';
|
||||||
|
|
||||||
|
-- src/udf.rs:9
|
||||||
|
-- vectors::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION "ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS double precision[] /* alloc::vec::Vec<f64> */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:73
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::postgres::datatype::Vector)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vector_in
|
||||||
|
-- vector_out
|
||||||
|
-- vector_typmod_in
|
||||||
|
-- vector_typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vector_in,
|
||||||
|
OUTPUT = vector_out,
|
||||||
|
TYPMOD_IN = vector_typmod_in,
|
||||||
|
TYPMOD_OUT = vector_typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:485
|
||||||
|
-- vectors::postgres::datatype::operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:485
|
||||||
|
-- vectors::postgres::datatype::operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:463
|
||||||
|
-- vectors::postgres::datatype::operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:463
|
||||||
|
-- vectors::postgres::datatype::operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:534
|
||||||
|
-- vectors::postgres::datatype::operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::utils::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:534
|
||||||
|
-- vectors::postgres::datatype::operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:518
|
||||||
|
-- vectors::postgres::datatype::operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:518
|
||||||
|
-- vectors::postgres::datatype::operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:496
|
||||||
|
-- vectors::postgres::datatype::operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:496
|
||||||
|
-- vectors::postgres::datatype::operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:542
|
||||||
|
-- vectors::postgres::datatype::operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::utils::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:542
|
||||||
|
-- vectors::postgres::datatype::operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:87
|
||||||
|
-- vectors::postgres::index::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:435
|
||||||
|
-- vectors::postgres::datatype::operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_add"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:435
|
||||||
|
-- vectors::postgres::datatype::operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:507
|
||||||
|
-- vectors::postgres::datatype::operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:507
|
||||||
|
-- vectors::postgres::datatype::operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:447
|
||||||
|
-- vectors::postgres::datatype::operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:447
|
||||||
|
-- vectors::postgres::datatype::operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:474
|
||||||
|
-- vectors::postgres::datatype::operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:474
|
||||||
|
-- vectors::postgres::datatype::operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:526
|
||||||
|
-- vectors::postgres::datatype::operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::utils::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:526
|
||||||
|
-- vectors::postgres::datatype::operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/lib.rs:25
|
||||||
|
-- finalize
|
||||||
|
CREATE OPERATOR CLASS l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS cosine_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
399
sql/install/vectors--0.1.1.sql
Normal file
399
sql/install/vectors--0.1.1.sql
Normal file
@@ -0,0 +1,399 @@
|
|||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- src/lib.rs:25
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/functions.rs:14
|
||||||
|
-- vectors::postgres::functions::vectors_unload
|
||||||
|
CREATE FUNCTION "vectors_unload"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS void
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vectors_unload_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/functions.rs:5
|
||||||
|
-- vectors::postgres::functions::vectors_load
|
||||||
|
CREATE FUNCTION "vectors_load"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS void
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vectors_load_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:424
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_out
|
||||||
|
CREATE FUNCTION "vector_typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:411
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_in
|
||||||
|
CREATE FUNCTION "vector_typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:397
|
||||||
|
-- vectors::postgres::datatype::vector_out
|
||||||
|
CREATE FUNCTION "vector_out"(
|
||||||
|
"vector" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:349
|
||||||
|
-- vectors::postgres::datatype::vector_in
|
||||||
|
CREATE FUNCTION "vector_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:17
|
||||||
|
-- vectors::postgres::casts::cast_vector_to_array
|
||||||
|
CREATE FUNCTION "cast_vector_to_array"(
|
||||||
|
"vector" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"_typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS real[] /* alloc::vec::Vec<vectors::prelude::scalar::Scalar> */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_vector_to_array_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:5
|
||||||
|
-- vectors::postgres::casts::cast_array_to_vector
|
||||||
|
CREATE FUNCTION "cast_array_to_vector"(
|
||||||
|
"array" real[], /* pgrx::datum::array::Array<vectors::prelude::scalar::Scalar> */
|
||||||
|
"typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_array_to_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/embedding/udf.rs:11
|
||||||
|
-- vectors::embedding::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION "ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:73
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::postgres::datatype::Vector)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vector_in
|
||||||
|
-- vector_out
|
||||||
|
-- vector_typmod_in
|
||||||
|
-- vector_typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vector_in,
|
||||||
|
OUTPUT = vector_out,
|
||||||
|
TYPMOD_IN = vector_typmod_in,
|
||||||
|
TYPMOD_OUT = vector_typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:34
|
||||||
|
-- vectors::postgres::index::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_add"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/lib.rs:26
|
||||||
|
-- finalize
|
||||||
|
CREATE CAST (real[] AS vector)
|
||||||
|
WITH FUNCTION cast_array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (vector AS real[])
|
||||||
|
WITH FUNCTION cast_vector_to_array(vector, integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS cosine_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
381
sql/install/vectors--0.1.10.sql
Normal file
381
sql/install/vectors--0.1.10.sql
Normal file
@@ -0,0 +1,381 @@
|
|||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- src/lib.rs:16
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:450
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_out
|
||||||
|
CREATE FUNCTION "vector_typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:435
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_in
|
||||||
|
CREATE FUNCTION "vector_typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:421
|
||||||
|
-- vectors::postgres::datatype::vector_out
|
||||||
|
CREATE FUNCTION "vector_out"(
|
||||||
|
"vector" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:348
|
||||||
|
-- vectors::postgres::datatype::vector_in
|
||||||
|
CREATE FUNCTION "vector_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:19
|
||||||
|
-- vectors::postgres::casts::cast_vector_to_array
|
||||||
|
CREATE FUNCTION "cast_vector_to_array"(
|
||||||
|
"vector" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"_typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS real[] /* alloc::vec::Vec<vectors::prelude::scalar::Scalar> */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_vector_to_array_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:5
|
||||||
|
-- vectors::postgres::casts::cast_array_to_vector
|
||||||
|
CREATE FUNCTION "cast_array_to_vector"(
|
||||||
|
"array" real[], /* pgrx::datum::array::Array<vectors::prelude::scalar::Scalar> */
|
||||||
|
"typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_array_to_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/embedding/udf.rs:11
|
||||||
|
-- vectors::embedding::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION "ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:72
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::postgres::datatype::Vector)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vector_in
|
||||||
|
-- vector_out
|
||||||
|
-- vector_typmod_in
|
||||||
|
-- vector_typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vector_in,
|
||||||
|
OUTPUT = vector_out,
|
||||||
|
TYPMOD_IN = vector_typmod_in,
|
||||||
|
TYPMOD_OUT = vector_typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:82
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:82
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:161
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:161
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_add"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:26
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:26
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:65
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:65
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:147
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:147
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:133
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:133
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:175
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:175
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:48
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:48
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:116
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:116
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:34
|
||||||
|
-- vectors::postgres::index::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/lib.rs:17
|
||||||
|
-- finalize
|
||||||
|
CREATE CAST (real[] AS vector)
|
||||||
|
WITH FUNCTION cast_array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (vector AS real[])
|
||||||
|
WITH FUNCTION cast_vector_to_array(vector, integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS cosine_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
414
sql/install/vectors--0.1.11.sql
Normal file
414
sql/install/vectors--0.1.11.sql
Normal file
@@ -0,0 +1,414 @@
|
|||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- src/lib.rs:16
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:450
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_out
|
||||||
|
CREATE FUNCTION "vector_typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:435
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_in
|
||||||
|
CREATE FUNCTION "vector_typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/stat.rs:20
|
||||||
|
-- vectors::postgres::stat::vector_stat
|
||||||
|
CREATE FUNCTION "vector_stat"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS VectorIndexInfo /* pgrx::heap_tuple::PgHeapTuple<pgrx::pgbox::AllocatedByRust> */
|
||||||
|
STRICT VOLATILE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_stat_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:421
|
||||||
|
-- vectors::postgres::datatype::vector_out
|
||||||
|
CREATE FUNCTION "vector_out"(
|
||||||
|
"vector" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:348
|
||||||
|
-- vectors::postgres::datatype::vector_in
|
||||||
|
CREATE FUNCTION "vector_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:19
|
||||||
|
-- vectors::postgres::casts::cast_vector_to_array
|
||||||
|
CREATE FUNCTION "cast_vector_to_array"(
|
||||||
|
"vector" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"_typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS real[] /* alloc::vec::Vec<vectors::prelude::scalar::Scalar> */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_vector_to_array_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:5
|
||||||
|
-- vectors::postgres::casts::cast_array_to_vector
|
||||||
|
CREATE FUNCTION "cast_array_to_vector"(
|
||||||
|
"array" real[], /* pgrx::datum::array::Array<vectors::prelude::scalar::Scalar> */
|
||||||
|
"typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_array_to_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/embedding/udf.rs:11
|
||||||
|
-- vectors::embedding::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION "ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/stat.rs:4
|
||||||
|
CREATE TYPE VectorIndexInfo AS (
|
||||||
|
indexing BOOL,
|
||||||
|
idx_tuples INT,
|
||||||
|
idx_sealed_len INT,
|
||||||
|
idx_growing_len INT,
|
||||||
|
idx_write INT,
|
||||||
|
idx_sealed INT[],
|
||||||
|
idx_growing INT[],
|
||||||
|
idx_config TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:72
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::postgres::datatype::Vector)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vector_in
|
||||||
|
-- vector_out
|
||||||
|
-- vector_typmod_in
|
||||||
|
-- vector_typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vector_in,
|
||||||
|
OUTPUT = vector_out,
|
||||||
|
TYPMOD_IN = vector_typmod_in,
|
||||||
|
TYPMOD_OUT = vector_typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:48
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:48
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:116
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:116
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:133
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:133
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:65
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:65
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:161
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:161
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_add"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:34
|
||||||
|
-- vectors::postgres::index::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:26
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:26
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:175
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:175
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:82
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:82
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:147
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:147
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/lib.rs:17
|
||||||
|
-- finalize
|
||||||
|
CREATE CAST (real[] AS vector)
|
||||||
|
WITH FUNCTION cast_array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (vector AS real[])
|
||||||
|
WITH FUNCTION cast_vector_to_array(vector, integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS cosine_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE VIEW pg_vector_index_info AS
|
||||||
|
SELECT
|
||||||
|
C.oid AS tablerelid,
|
||||||
|
I.oid AS indexrelid,
|
||||||
|
C.relname AS tablename,
|
||||||
|
I.relname AS indexname,
|
||||||
|
(vector_stat(I.oid)).*
|
||||||
|
FROM pg_class C JOIN
|
||||||
|
pg_index X ON C.oid = X.indrelid JOIN
|
||||||
|
pg_class I ON I.oid = X.indexrelid JOIN
|
||||||
|
pg_am A ON A.oid = I.relam
|
||||||
|
WHERE A.amname = 'vectors';
|
736
sql/install/vectors--0.1.12.sql
Normal file
736
sql/install/vectors--0.1.12.sql
Normal file
@@ -0,0 +1,736 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
-- src/lib.rs:18
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
CREATE TYPE vecf16;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/index/views.rs:18
|
||||||
|
-- vectors::index::views::vector_stat
|
||||||
|
CREATE FUNCTION "vector_stat"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS VectorIndexStat /* pgrx::heap_tuple::PgHeapTuple<pgrx::pgbox::AllocatedByRust> */
|
||||||
|
STRICT VOLATILE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_stat_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/vecf32.rs:332
|
||||||
|
-- vectors::datatype::vecf32::vecf32_out
|
||||||
|
CREATE FUNCTION "vecf32_out"(
|
||||||
|
"vector" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_out_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/vecf32.rs:268
|
||||||
|
-- vectors::datatype::vecf32::vecf32_in
|
||||||
|
CREATE FUNCTION "vecf32_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::datatype::vecf32::Vecf32Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_in_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/casts_f32.rs:24
|
||||||
|
-- vectors::datatype::casts_f32::vecf32_cast_vector_to_array
|
||||||
|
CREATE FUNCTION "vecf32_cast_vector_to_array"(
|
||||||
|
"vector" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"_typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS real[] /* alloc::vec::Vec<f32> */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_cast_vector_to_array_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/casts_f32.rs:6
|
||||||
|
-- vectors::datatype::casts_f32::vecf32_cast_array_to_vector
|
||||||
|
CREATE FUNCTION "vecf32_cast_array_to_vector"(
|
||||||
|
"array" real[], /* pgrx::datum::array::Array<f32> */
|
||||||
|
"typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS vector /* vectors::datatype::vecf32::Vecf32Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_cast_array_to_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/vecf16.rs:332
|
||||||
|
-- vectors::datatype::vecf16::vecf16_out
|
||||||
|
CREATE FUNCTION "vecf16_out"(
|
||||||
|
"vector" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_out_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/vecf16.rs:268
|
||||||
|
-- vectors::datatype::vecf16::vecf16_in
|
||||||
|
CREATE FUNCTION "vecf16_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vecf16 /* vectors::datatype::vecf16::Vecf16Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_in_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/typmod.rs:71
|
||||||
|
-- vectors::datatype::typmod::typmod_out
|
||||||
|
CREATE FUNCTION "typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/typmod.rs:56
|
||||||
|
-- vectors::datatype::typmod::typmod_in
|
||||||
|
CREATE FUNCTION "typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/embedding/udf.rs:9
|
||||||
|
-- vectors::embedding::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION "ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS vector /* vectors::datatype::vecf32::Vecf32Output */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/vecf32.rs:22
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::datatype::vecf32::Vecf32)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vecf32_in
|
||||||
|
-- vecf32_out
|
||||||
|
-- typmod_in
|
||||||
|
-- typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vecf32_in,
|
||||||
|
OUTPUT = vecf32_out,
|
||||||
|
TYPMOD_IN = typmod_in,
|
||||||
|
TYPMOD_OUT = typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:26
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS vector /* vectors::datatype::vecf32::Vecf32Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:26
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="vecf32_operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:99
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:99
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="vecf32_operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:65
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:65
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="vecf32_operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:48
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:48
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="vecf32_operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:147
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS real /* f32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:147
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="vecf32_operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:8
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_add"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS vector /* vectors::datatype::vecf32::Vecf32Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:8
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="vecf32_operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:161
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS real /* f32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:161
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="vecf32_operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/index/am.rs:33
|
||||||
|
-- vectors::index::am::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:175
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS real /* f32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:175
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="vecf32_operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:82
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:82
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="vecf32_operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:116
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:116
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="vecf32_operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:133
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:133
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="vecf32_operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/vecf16.rs:22
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::datatype::vecf16::Vecf16)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vecf16_in
|
||||||
|
-- vecf16_out
|
||||||
|
-- typmod_in
|
||||||
|
-- typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vecf16 (
|
||||||
|
INPUT = vecf16_in,
|
||||||
|
OUTPUT = vecf16_out,
|
||||||
|
TYPMOD_IN = typmod_in,
|
||||||
|
TYPMOD_OUT = typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:133
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_neq"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:133
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="vecf16_operator_neq",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:48
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_lt"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:48
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="vecf16_operator_lt",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:175
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_l2"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS real /* f32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:175
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="vecf16_operator_l2",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:8
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_add"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS vecf16 /* vectors::datatype::vecf16::Vecf16Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:8
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="vecf16_operator_add",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:26
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_minus"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS vecf16 /* vectors::datatype::vecf16::Vecf16Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:26
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="vecf16_operator_minus",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:161
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_dot"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS real /* f32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:161
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="vecf16_operator_dot",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:82
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_gt"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:82
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="vecf16_operator_gt",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:65
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_lte"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:65
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="vecf16_operator_lte",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:116
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_eq"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:116
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="vecf16_operator_eq",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:147
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_cosine"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS real /* f32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:147
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="vecf16_operator_cosine",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:99
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_gte"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:99
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="vecf16_operator_gte",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/index/views.rs:4
|
||||||
|
CREATE TYPE VectorIndexStat AS (
|
||||||
|
idx_indexing BOOL,
|
||||||
|
idx_tuples BIGINT,
|
||||||
|
idx_sealed BIGINT[],
|
||||||
|
idx_growing BIGINT[],
|
||||||
|
idx_write BIGINT,
|
||||||
|
idx_options TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/lib.rs:19
|
||||||
|
-- finalize
|
||||||
|
CREATE CAST (real[] AS vector)
|
||||||
|
WITH FUNCTION vecf32_cast_array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (vector AS real[])
|
||||||
|
WITH FUNCTION vecf32_cast_vector_to_array(vector, integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS vector_l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS vector_dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS vector_cos_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS vecf16_l2_ops
|
||||||
|
FOR TYPE vecf16 USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vecf16, vecf16) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS vecf16_dot_ops
|
||||||
|
FOR TYPE vecf16 USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vecf16, vecf16) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS vecf16_cos_ops
|
||||||
|
FOR TYPE vecf16 USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vecf16, vecf16) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE VIEW pg_vector_index_info AS
|
||||||
|
SELECT
|
||||||
|
C.oid AS tablerelid,
|
||||||
|
I.oid AS indexrelid,
|
||||||
|
C.relname AS tablename,
|
||||||
|
I.relname AS indexname,
|
||||||
|
(vector_stat(I.relfilenode)).*
|
||||||
|
FROM pg_class C JOIN
|
||||||
|
pg_index X ON C.oid = X.indrelid JOIN
|
||||||
|
pg_class I ON I.oid = X.indexrelid JOIN
|
||||||
|
pg_am A ON A.oid = I.relam
|
||||||
|
WHERE A.amname = 'vectors';
|
||||||
|
|
718
sql/install/vectors--0.1.13.sql
Normal file
718
sql/install/vectors--0.1.13.sql
Normal file
@@ -0,0 +1,718 @@
|
|||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
-- src/lib.rs:18
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
CREATE TYPE vecf16;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/index/views.rs:18
|
||||||
|
-- vectors::index::views::vector_stat
|
||||||
|
CREATE FUNCTION "vector_stat"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS VectorIndexStat /* pgrx::heap_tuple::PgHeapTuple<pgrx::pgbox::AllocatedByRust> */
|
||||||
|
STRICT VOLATILE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_stat_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/vecf32.rs:332
|
||||||
|
-- vectors::datatype::vecf32::vecf32_out
|
||||||
|
CREATE FUNCTION "vecf32_out"(
|
||||||
|
"vector" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_out_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/vecf32.rs:268
|
||||||
|
-- vectors::datatype::vecf32::vecf32_in
|
||||||
|
CREATE FUNCTION "vecf32_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::datatype::vecf32::Vecf32Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_in_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/casts_f32.rs:24
|
||||||
|
-- vectors::datatype::casts_f32::vecf32_cast_vector_to_array
|
||||||
|
CREATE FUNCTION "vecf32_cast_vector_to_array"(
|
||||||
|
"vector" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"_typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS real[] /* alloc::vec::Vec<f32> */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_cast_vector_to_array_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/casts_f32.rs:6
|
||||||
|
-- vectors::datatype::casts_f32::vecf32_cast_array_to_vector
|
||||||
|
CREATE FUNCTION "vecf32_cast_array_to_vector"(
|
||||||
|
"array" real[], /* pgrx::datum::array::Array<f32> */
|
||||||
|
"typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS vector /* vectors::datatype::vecf32::Vecf32Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_cast_array_to_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/vecf16.rs:332
|
||||||
|
-- vectors::datatype::vecf16::vecf16_out
|
||||||
|
CREATE FUNCTION "vecf16_out"(
|
||||||
|
"vector" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_out_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/vecf16.rs:268
|
||||||
|
-- vectors::datatype::vecf16::vecf16_in
|
||||||
|
CREATE FUNCTION "vecf16_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vecf16 /* vectors::datatype::vecf16::Vecf16Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_in_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/typmod.rs:71
|
||||||
|
-- vectors::datatype::typmod::typmod_out
|
||||||
|
CREATE FUNCTION "typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/typmod.rs:56
|
||||||
|
-- vectors::datatype::typmod::typmod_in
|
||||||
|
CREATE FUNCTION "typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/embedding/udf.rs:9
|
||||||
|
-- vectors::embedding::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION "ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS vector /* vectors::datatype::vecf32::Vecf32Output */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/vecf16.rs:22
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::datatype::vecf16::Vecf16)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vecf16_in
|
||||||
|
-- vecf16_out
|
||||||
|
-- typmod_in
|
||||||
|
-- typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vecf16 (
|
||||||
|
INPUT = vecf16_in,
|
||||||
|
OUTPUT = vecf16_out,
|
||||||
|
TYPMOD_IN = typmod_in,
|
||||||
|
TYPMOD_OUT = typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:99
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_gte"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:99
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="vecf16_operator_gte",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:175
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_l2"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS real /* f32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:175
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="vecf16_operator_l2",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:26
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_minus"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS vecf16 /* vectors::datatype::vecf16::Vecf16Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:26
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="vecf16_operator_minus",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:8
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_add"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS vecf16 /* vectors::datatype::vecf16::Vecf16Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:8
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="vecf16_operator_add",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:48
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_lt"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:48
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="vecf16_operator_lt",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:116
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_eq"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:116
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="vecf16_operator_eq",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:133
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_neq"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:133
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="vecf16_operator_neq",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:161
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_dot"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS real /* f32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:161
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="vecf16_operator_dot",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:82
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_gt"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:82
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="vecf16_operator_gt",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:65
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_lte"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:65
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="vecf16_operator_lte",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:147
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vecf16
|
||||||
|
CREATE FUNCTION "vecf16_operator_cosine"(
|
||||||
|
"lhs" vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
"rhs" vecf16 /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
) RETURNS real /* f32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf16_operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f16.rs:147
|
||||||
|
-- vectors::datatype::operators_f16::vecf16_operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="vecf16_operator_cosine",
|
||||||
|
LEFTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
RIGHTARG=vecf16, /* vectors::datatype::vecf16::Vecf16Input */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/vecf32.rs:22
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::datatype::vecf32::Vecf32)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vecf32_in
|
||||||
|
-- vecf32_out
|
||||||
|
-- typmod_in
|
||||||
|
-- typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vecf32_in,
|
||||||
|
OUTPUT = vecf32_out,
|
||||||
|
TYPMOD_IN = typmod_in,
|
||||||
|
TYPMOD_OUT = typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:48
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:48
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="vecf32_operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:99
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:99
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="vecf32_operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/index/am.rs:33
|
||||||
|
-- vectors::index::am::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:175
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS real /* f32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:175
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="vecf32_operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:65
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:65
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="vecf32_operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:26
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS vector /* vectors::datatype::vecf32::Vecf32Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:26
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="vecf32_operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:82
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:82
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="vecf32_operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:161
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS real /* f32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:161
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="vecf32_operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:8
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_add"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS vector /* vectors::datatype::vecf32::Vecf32Output */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:8
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="vecf32_operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:147
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS real /* f32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:147
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="vecf32_operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:133
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:133
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="vecf32_operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:116
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vecf32
|
||||||
|
CREATE FUNCTION "vecf32_operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
"rhs" vector /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vecf32_operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/datatype/operators_f32.rs:116
|
||||||
|
-- vectors::datatype::operators_f32::vecf32_operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="vecf32_operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
RIGHTARG=vector, /* vectors::datatype::vecf32::Vecf32Input */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/index/views.rs:4
|
||||||
|
CREATE TYPE VectorIndexStat AS (
|
||||||
|
idx_indexing BOOL,
|
||||||
|
idx_tuples BIGINT,
|
||||||
|
idx_sealed BIGINT[],
|
||||||
|
idx_growing BIGINT[],
|
||||||
|
idx_write BIGINT,
|
||||||
|
idx_options TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/lib.rs:19
|
||||||
|
-- finalize
|
||||||
|
CREATE CAST (real[] AS vector)
|
||||||
|
WITH FUNCTION vecf32_cast_array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (vector AS real[])
|
||||||
|
WITH FUNCTION vecf32_cast_vector_to_array(vector, integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS vector_l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS vector_dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS vector_cos_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS vecf16_l2_ops
|
||||||
|
FOR TYPE vecf16 USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vecf16, vecf16) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS vecf16_dot_ops
|
||||||
|
FOR TYPE vecf16 USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vecf16, vecf16) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS vecf16_cos_ops
|
||||||
|
FOR TYPE vecf16 USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vecf16, vecf16) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE VIEW pg_vector_index_info AS
|
||||||
|
SELECT
|
||||||
|
C.oid AS tablerelid,
|
||||||
|
I.oid AS indexrelid,
|
||||||
|
C.relname AS tablename,
|
||||||
|
I.relname AS indexname,
|
||||||
|
(vector_stat(I.relfilenode)).*
|
||||||
|
FROM pg_class C JOIN
|
||||||
|
pg_index X ON C.oid = X.indrelid JOIN
|
||||||
|
pg_class I ON I.oid = X.indexrelid JOIN
|
||||||
|
pg_am A ON A.oid = I.relam
|
||||||
|
WHERE A.amname = 'vectors';
|
||||||
|
|
399
sql/install/vectors--0.1.2.sql
Normal file
399
sql/install/vectors--0.1.2.sql
Normal file
@@ -0,0 +1,399 @@
|
|||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- src/lib.rs:25
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/functions.rs:14
|
||||||
|
-- vectors::postgres::functions::vectors_unload
|
||||||
|
CREATE FUNCTION "vectors_unload"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS void
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vectors_unload_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/functions.rs:5
|
||||||
|
-- vectors::postgres::functions::vectors_load
|
||||||
|
CREATE FUNCTION "vectors_load"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS void
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vectors_load_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:424
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_out
|
||||||
|
CREATE FUNCTION "vector_typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:411
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_in
|
||||||
|
CREATE FUNCTION "vector_typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:397
|
||||||
|
-- vectors::postgres::datatype::vector_out
|
||||||
|
CREATE FUNCTION "vector_out"(
|
||||||
|
"vector" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:349
|
||||||
|
-- vectors::postgres::datatype::vector_in
|
||||||
|
CREATE FUNCTION "vector_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:17
|
||||||
|
-- vectors::postgres::casts::cast_vector_to_array
|
||||||
|
CREATE FUNCTION "cast_vector_to_array"(
|
||||||
|
"vector" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"_typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS real[] /* alloc::vec::Vec<vectors::prelude::scalar::Scalar> */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_vector_to_array_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:5
|
||||||
|
-- vectors::postgres::casts::cast_array_to_vector
|
||||||
|
CREATE FUNCTION "cast_array_to_vector"(
|
||||||
|
"array" real[], /* pgrx::datum::array::Array<vectors::prelude::scalar::Scalar> */
|
||||||
|
"typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_array_to_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/embedding/udf.rs:11
|
||||||
|
-- vectors::embedding::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION "ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:73
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::postgres::datatype::Vector)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vector_in
|
||||||
|
-- vector_out
|
||||||
|
-- vector_typmod_in
|
||||||
|
-- vector_typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vector_in,
|
||||||
|
OUTPUT = vector_out,
|
||||||
|
TYPMOD_IN = vector_typmod_in,
|
||||||
|
TYPMOD_OUT = vector_typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_add"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:34
|
||||||
|
-- vectors::postgres::index::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/lib.rs:26
|
||||||
|
-- finalize
|
||||||
|
CREATE CAST (real[] AS vector)
|
||||||
|
WITH FUNCTION cast_array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (vector AS real[])
|
||||||
|
WITH FUNCTION cast_vector_to_array(vector, integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS cosine_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
399
sql/install/vectors--0.1.3.sql
Normal file
399
sql/install/vectors--0.1.3.sql
Normal file
@@ -0,0 +1,399 @@
|
|||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- src/lib.rs:25
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/functions.rs:14
|
||||||
|
-- vectors::postgres::functions::vectors_unload
|
||||||
|
CREATE FUNCTION "vectors_unload"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS void
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vectors_unload_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/functions.rs:5
|
||||||
|
-- vectors::postgres::functions::vectors_load
|
||||||
|
CREATE FUNCTION "vectors_load"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS void
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vectors_load_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:424
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_out
|
||||||
|
CREATE FUNCTION "vector_typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:411
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_in
|
||||||
|
CREATE FUNCTION "vector_typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:397
|
||||||
|
-- vectors::postgres::datatype::vector_out
|
||||||
|
CREATE FUNCTION "vector_out"(
|
||||||
|
"vector" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:349
|
||||||
|
-- vectors::postgres::datatype::vector_in
|
||||||
|
CREATE FUNCTION "vector_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:17
|
||||||
|
-- vectors::postgres::casts::cast_vector_to_array
|
||||||
|
CREATE FUNCTION "cast_vector_to_array"(
|
||||||
|
"vector" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"_typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS real[] /* alloc::vec::Vec<vectors::prelude::scalar::Scalar> */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_vector_to_array_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:5
|
||||||
|
-- vectors::postgres::casts::cast_array_to_vector
|
||||||
|
CREATE FUNCTION "cast_array_to_vector"(
|
||||||
|
"array" real[], /* pgrx::datum::array::Array<vectors::prelude::scalar::Scalar> */
|
||||||
|
"typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_array_to_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/embedding/udf.rs:11
|
||||||
|
-- vectors::embedding::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION "ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:73
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::postgres::datatype::Vector)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vector_in
|
||||||
|
-- vector_out
|
||||||
|
-- vector_typmod_in
|
||||||
|
-- vector_typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vector_in,
|
||||||
|
OUTPUT = vector_out,
|
||||||
|
TYPMOD_IN = vector_typmod_in,
|
||||||
|
TYPMOD_OUT = vector_typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_add"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:34
|
||||||
|
-- vectors::postgres::index::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/lib.rs:26
|
||||||
|
-- finalize
|
||||||
|
CREATE CAST (real[] AS vector)
|
||||||
|
WITH FUNCTION cast_array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (vector AS real[])
|
||||||
|
WITH FUNCTION cast_vector_to_array(vector, integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS cosine_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
399
sql/install/vectors--0.1.4.sql
Normal file
399
sql/install/vectors--0.1.4.sql
Normal file
@@ -0,0 +1,399 @@
|
|||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- src/lib.rs:25
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/functions.rs:14
|
||||||
|
-- vectors::postgres::functions::vectors_unload
|
||||||
|
CREATE FUNCTION "vectors_unload"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS void
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vectors_unload_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/functions.rs:5
|
||||||
|
-- vectors::postgres::functions::vectors_load
|
||||||
|
CREATE FUNCTION "vectors_load"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS void
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vectors_load_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:424
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_out
|
||||||
|
CREATE FUNCTION "vector_typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:411
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_in
|
||||||
|
CREATE FUNCTION "vector_typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:397
|
||||||
|
-- vectors::postgres::datatype::vector_out
|
||||||
|
CREATE FUNCTION "vector_out"(
|
||||||
|
"vector" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:349
|
||||||
|
-- vectors::postgres::datatype::vector_in
|
||||||
|
CREATE FUNCTION "vector_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:17
|
||||||
|
-- vectors::postgres::casts::cast_vector_to_array
|
||||||
|
CREATE FUNCTION "cast_vector_to_array"(
|
||||||
|
"vector" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"_typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS real[] /* alloc::vec::Vec<vectors::prelude::scalar::Scalar> */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_vector_to_array_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:5
|
||||||
|
-- vectors::postgres::casts::cast_array_to_vector
|
||||||
|
CREATE FUNCTION "cast_array_to_vector"(
|
||||||
|
"array" real[], /* pgrx::datum::array::Array<vectors::prelude::scalar::Scalar> */
|
||||||
|
"typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_array_to_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/embedding/udf.rs:11
|
||||||
|
-- vectors::embedding::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION "ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:73
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::postgres::datatype::Vector)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vector_in
|
||||||
|
-- vector_out
|
||||||
|
-- vector_typmod_in
|
||||||
|
-- vector_typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vector_in,
|
||||||
|
OUTPUT = vector_out,
|
||||||
|
TYPMOD_IN = vector_typmod_in,
|
||||||
|
TYPMOD_OUT = vector_typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_add"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:35
|
||||||
|
-- vectors::postgres::index::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/lib.rs:26
|
||||||
|
-- finalize
|
||||||
|
CREATE CAST (real[] AS vector)
|
||||||
|
WITH FUNCTION cast_array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (vector AS real[])
|
||||||
|
WITH FUNCTION cast_vector_to_array(vector, integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS cosine_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
381
sql/install/vectors--0.1.5.sql
Normal file
381
sql/install/vectors--0.1.5.sql
Normal file
@@ -0,0 +1,381 @@
|
|||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- src/lib.rs:30
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:424
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_out
|
||||||
|
CREATE FUNCTION tensorchord."vector_typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:411
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_in
|
||||||
|
CREATE FUNCTION tensorchord."vector_typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:397
|
||||||
|
-- vectors::postgres::datatype::vector_out
|
||||||
|
CREATE FUNCTION tensorchord."vector_out"(
|
||||||
|
"vector" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:349
|
||||||
|
-- vectors::postgres::datatype::vector_in
|
||||||
|
CREATE FUNCTION tensorchord."vector_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:17
|
||||||
|
-- vectors::postgres::casts::cast_vector_to_array
|
||||||
|
CREATE FUNCTION tensorchord."cast_vector_to_array"(
|
||||||
|
"vector" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"_typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS real[] /* alloc::vec::Vec<vectors::prelude::scalar::Scalar> */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_vector_to_array_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:5
|
||||||
|
-- vectors::postgres::casts::cast_array_to_vector
|
||||||
|
CREATE FUNCTION tensorchord."cast_array_to_vector"(
|
||||||
|
"array" real[], /* pgrx::datum::array::Array<vectors::prelude::scalar::Scalar> */
|
||||||
|
"typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_array_to_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/embedding/udf.rs:11
|
||||||
|
-- vectors::embedding::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION tensorchord."ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:73
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::postgres::datatype::Vector)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vector_in
|
||||||
|
-- vector_out
|
||||||
|
-- vector_typmod_in
|
||||||
|
-- vector_typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vector_in,
|
||||||
|
OUTPUT = vector_out,
|
||||||
|
TYPMOD_IN = vector_typmod_in,
|
||||||
|
TYPMOD_OUT = vector_typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION tensorchord."operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
CREATE OPERATOR tensorchord.< (
|
||||||
|
PROCEDURE=tensorchord."operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION tensorchord."operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
CREATE OPERATOR tensorchord.- (
|
||||||
|
PROCEDURE=tensorchord."operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION tensorchord."operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
CREATE OPERATOR tensorchord.= (
|
||||||
|
PROCEDURE=tensorchord."operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION tensorchord."operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
CREATE OPERATOR tensorchord.>= (
|
||||||
|
PROCEDURE=tensorchord."operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION tensorchord."operator_add"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
CREATE OPERATOR tensorchord.+ (
|
||||||
|
PROCEDURE=tensorchord."operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION tensorchord."operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
CREATE OPERATOR tensorchord.<= (
|
||||||
|
PROCEDURE=tensorchord."operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION tensorchord."operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
CREATE OPERATOR tensorchord.<> (
|
||||||
|
PROCEDURE=tensorchord."operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION tensorchord."operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
CREATE OPERATOR tensorchord.<#> (
|
||||||
|
PROCEDURE=tensorchord."operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION tensorchord."operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
CREATE OPERATOR tensorchord.> (
|
||||||
|
PROCEDURE=tensorchord."operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:35
|
||||||
|
-- vectors::postgres::index::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION tensorchord."operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
CREATE OPERATOR tensorchord.<=> (
|
||||||
|
PROCEDURE=tensorchord."operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION tensorchord."operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
CREATE OPERATOR tensorchord.<-> (
|
||||||
|
PROCEDURE=tensorchord."operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/lib.rs:31
|
||||||
|
-- finalize
|
||||||
|
CREATE CAST (real[] AS vector)
|
||||||
|
WITH FUNCTION cast_array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (vector AS real[])
|
||||||
|
WITH FUNCTION cast_vector_to_array(vector, integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS cosine_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
381
sql/install/vectors--0.1.6.sql
Normal file
381
sql/install/vectors--0.1.6.sql
Normal file
@@ -0,0 +1,381 @@
|
|||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- src/lib.rs:30
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:424
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_out
|
||||||
|
CREATE FUNCTION "vector_typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:411
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_in
|
||||||
|
CREATE FUNCTION "vector_typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:397
|
||||||
|
-- vectors::postgres::datatype::vector_out
|
||||||
|
CREATE FUNCTION "vector_out"(
|
||||||
|
"vector" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:349
|
||||||
|
-- vectors::postgres::datatype::vector_in
|
||||||
|
CREATE FUNCTION "vector_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:17
|
||||||
|
-- vectors::postgres::casts::cast_vector_to_array
|
||||||
|
CREATE FUNCTION "cast_vector_to_array"(
|
||||||
|
"vector" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"_typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS real[] /* alloc::vec::Vec<vectors::prelude::scalar::Scalar> */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_vector_to_array_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:5
|
||||||
|
-- vectors::postgres::casts::cast_array_to_vector
|
||||||
|
CREATE FUNCTION "cast_array_to_vector"(
|
||||||
|
"array" real[], /* pgrx::datum::array::Array<vectors::prelude::scalar::Scalar> */
|
||||||
|
"typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_array_to_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/embedding/udf.rs:11
|
||||||
|
-- vectors::embedding::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION "ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:73
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::postgres::datatype::Vector)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vector_in
|
||||||
|
-- vector_out
|
||||||
|
-- vector_typmod_in
|
||||||
|
-- vector_typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vector_in,
|
||||||
|
OUTPUT = vector_out,
|
||||||
|
TYPMOD_IN = vector_typmod_in,
|
||||||
|
TYPMOD_OUT = vector_typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_add"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:35
|
||||||
|
-- vectors::postgres::index::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/lib.rs:31
|
||||||
|
-- finalize
|
||||||
|
CREATE CAST (real[] AS vector)
|
||||||
|
WITH FUNCTION cast_array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (vector AS real[])
|
||||||
|
WITH FUNCTION cast_vector_to_array(vector, integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS cosine_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
381
sql/install/vectors--0.1.7.sql
Normal file
381
sql/install/vectors--0.1.7.sql
Normal file
@@ -0,0 +1,381 @@
|
|||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- src/lib.rs:30
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:452
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_out
|
||||||
|
CREATE FUNCTION "vector_typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:437
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_in
|
||||||
|
CREATE FUNCTION "vector_typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:423
|
||||||
|
-- vectors::postgres::datatype::vector_out
|
||||||
|
CREATE FUNCTION "vector_out"(
|
||||||
|
"vector" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:350
|
||||||
|
-- vectors::postgres::datatype::vector_in
|
||||||
|
CREATE FUNCTION "vector_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:18
|
||||||
|
-- vectors::postgres::casts::cast_vector_to_array
|
||||||
|
CREATE FUNCTION "cast_vector_to_array"(
|
||||||
|
"vector" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"_typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS real[] /* alloc::vec::Vec<vectors::prelude::scalar::Scalar> */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_vector_to_array_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:5
|
||||||
|
-- vectors::postgres::casts::cast_array_to_vector
|
||||||
|
CREATE FUNCTION "cast_array_to_vector"(
|
||||||
|
"array" real[], /* pgrx::datum::array::Array<vectors::prelude::scalar::Scalar> */
|
||||||
|
"typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_array_to_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/embedding/udf.rs:11
|
||||||
|
-- vectors::embedding::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION "ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:74
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::postgres::datatype::Vector)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vector_in
|
||||||
|
-- vector_out
|
||||||
|
-- vector_typmod_in
|
||||||
|
-- vector_typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vector_in,
|
||||||
|
OUTPUT = vector_out,
|
||||||
|
TYPMOD_IN = vector_typmod_in,
|
||||||
|
TYPMOD_OUT = vector_typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:115
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:107
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:91
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:47
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:36
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:20
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:69
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:58
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_add"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:35
|
||||||
|
-- vectors::postgres::index::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:80
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/lib.rs:31
|
||||||
|
-- finalize
|
||||||
|
CREATE CAST (real[] AS vector)
|
||||||
|
WITH FUNCTION cast_array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (vector AS real[])
|
||||||
|
WITH FUNCTION cast_vector_to_array(vector, integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS cosine_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
381
sql/install/vectors--0.1.8.sql
Normal file
381
sql/install/vectors--0.1.8.sql
Normal file
@@ -0,0 +1,381 @@
|
|||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- src/lib.rs:20
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:452
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_out
|
||||||
|
CREATE FUNCTION "vector_typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:437
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_in
|
||||||
|
CREATE FUNCTION "vector_typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:423
|
||||||
|
-- vectors::postgres::datatype::vector_out
|
||||||
|
CREATE FUNCTION "vector_out"(
|
||||||
|
"vector" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:350
|
||||||
|
-- vectors::postgres::datatype::vector_in
|
||||||
|
CREATE FUNCTION "vector_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:18
|
||||||
|
-- vectors::postgres::casts::cast_vector_to_array
|
||||||
|
CREATE FUNCTION "cast_vector_to_array"(
|
||||||
|
"vector" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"_typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS real[] /* alloc::vec::Vec<vectors::prelude::scalar::Scalar> */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_vector_to_array_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:5
|
||||||
|
-- vectors::postgres::casts::cast_array_to_vector
|
||||||
|
CREATE FUNCTION "cast_array_to_vector"(
|
||||||
|
"array" real[], /* pgrx::datum::array::Array<vectors::prelude::scalar::Scalar> */
|
||||||
|
"typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_array_to_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/embedding/udf.rs:11
|
||||||
|
-- vectors::embedding::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION "ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:74
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::postgres::datatype::Vector)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vector_in
|
||||||
|
-- vector_out
|
||||||
|
-- vector_typmod_in
|
||||||
|
-- vector_typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vector_in,
|
||||||
|
OUTPUT = vector_out,
|
||||||
|
TYPMOD_IN = vector_typmod_in,
|
||||||
|
TYPMOD_OUT = vector_typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:82
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:82
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:161
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:161
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:48
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:48
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:116
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:116
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:147
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:147
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:175
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:175
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:34
|
||||||
|
-- vectors::postgres::index::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:26
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:26
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:133
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:133
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_add"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:65
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:65
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/lib.rs:21
|
||||||
|
-- finalize
|
||||||
|
CREATE CAST (real[] AS vector)
|
||||||
|
WITH FUNCTION cast_array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (vector AS real[])
|
||||||
|
WITH FUNCTION cast_vector_to_array(vector, integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS cosine_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
413
sql/install/vectors--0.1.9.sql
Normal file
413
sql/install/vectors--0.1.9.sql
Normal file
@@ -0,0 +1,413 @@
|
|||||||
|
/*
|
||||||
|
This file is auto generated by pgrx.
|
||||||
|
|
||||||
|
The ordering of items is not stable, it is driven by a dependency graph.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- src/lib.rs:16
|
||||||
|
-- bootstrap
|
||||||
|
CREATE TYPE vector;
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:450
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_out
|
||||||
|
CREATE FUNCTION "vector_typmod_out"(
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:435
|
||||||
|
-- vectors::postgres::datatype::vector_typmod_in
|
||||||
|
CREATE FUNCTION "vector_typmod_in"(
|
||||||
|
"list" cstring[] /* pgrx::datum::array::Array<&core::ffi::c_str::CStr> */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_typmod_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/functions.rs:5
|
||||||
|
-- vectors::postgres::functions::vector_stat_tuples_done
|
||||||
|
CREATE FUNCTION "vector_stat_tuples_done"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS INT /* i32 */
|
||||||
|
STRICT VOLATILE PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_stat_tuples_done_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/functions.rs:16
|
||||||
|
-- vectors::postgres::functions::vector_stat_config
|
||||||
|
CREATE FUNCTION "vector_stat_config"(
|
||||||
|
"oid" oid /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
) RETURNS TEXT /* alloc::string::String */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_stat_config_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:421
|
||||||
|
-- vectors::postgres::datatype::vector_out
|
||||||
|
CREATE FUNCTION "vector_out"(
|
||||||
|
"vector" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS cstring /* alloc::ffi::c_str::CString */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_out_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:348
|
||||||
|
-- vectors::postgres::datatype::vector_in
|
||||||
|
CREATE FUNCTION "vector_in"(
|
||||||
|
"input" cstring, /* &core::ffi::c_str::CStr */
|
||||||
|
"_oid" oid, /* pgrx_pg_sys::submodules::oids::Oid */
|
||||||
|
"typmod" INT /* i32 */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'vector_in_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:19
|
||||||
|
-- vectors::postgres::casts::cast_vector_to_array
|
||||||
|
CREATE FUNCTION "cast_vector_to_array"(
|
||||||
|
"vector" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"_typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS real[] /* alloc::vec::Vec<vectors::prelude::scalar::Scalar> */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_vector_to_array_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/casts.rs:5
|
||||||
|
-- vectors::postgres::casts::cast_array_to_vector
|
||||||
|
CREATE FUNCTION "cast_array_to_vector"(
|
||||||
|
"array" real[], /* pgrx::datum::array::Array<vectors::prelude::scalar::Scalar> */
|
||||||
|
"typmod" INT, /* i32 */
|
||||||
|
"_explicit" bool /* bool */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'cast_array_to_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/embedding/udf.rs:11
|
||||||
|
-- vectors::embedding::udf::ai_embedding_vector
|
||||||
|
CREATE FUNCTION "ai_embedding_vector"(
|
||||||
|
"input" TEXT /* alloc::string::String */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
STRICT
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'ai_embedding_vector_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/datatype.rs:72
|
||||||
|
-- creates:
|
||||||
|
-- Type(vectors::postgres::datatype::Vector)
|
||||||
|
|
||||||
|
-- requires:
|
||||||
|
-- vector_in
|
||||||
|
-- vector_out
|
||||||
|
-- vector_typmod_in
|
||||||
|
-- vector_typmod_out
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TYPE vector (
|
||||||
|
INPUT = vector_in,
|
||||||
|
OUTPUT = vector_out,
|
||||||
|
TYPMOD_IN = vector_typmod_in,
|
||||||
|
TYPMOD_OUT = vector_typmod_out,
|
||||||
|
STORAGE = EXTENDED,
|
||||||
|
INTERNALLENGTH = VARIABLE,
|
||||||
|
ALIGNMENT = double
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:147
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_cosine"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_cosine_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:147
|
||||||
|
-- vectors::postgres::operators::operator_cosine
|
||||||
|
CREATE OPERATOR <=> (
|
||||||
|
PROCEDURE="operator_cosine",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:161
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_dot"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_dot_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:161
|
||||||
|
-- vectors::postgres::operators::operator_dot
|
||||||
|
CREATE OPERATOR <#> (
|
||||||
|
PROCEDURE="operator_dot",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <#>
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:48
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:48
|
||||||
|
-- vectors::postgres::operators::operator_lt
|
||||||
|
CREATE OPERATOR < (
|
||||||
|
PROCEDURE="operator_lt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >,
|
||||||
|
NEGATOR = >=,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:175
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_l2"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS real /* vectors::prelude::scalar::Scalar */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_l2_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:175
|
||||||
|
-- vectors::postgres::operators::operator_l2
|
||||||
|
CREATE OPERATOR <-> (
|
||||||
|
PROCEDURE="operator_l2",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <->
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:26
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_minus"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_minus_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:26
|
||||||
|
-- vectors::postgres::operators::operator_minus
|
||||||
|
CREATE OPERATOR - (
|
||||||
|
PROCEDURE="operator_minus",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_add"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS vector /* vectors::postgres::datatype::VectorOutput */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_add_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:8
|
||||||
|
-- vectors::postgres::operators::operator_add
|
||||||
|
CREATE OPERATOR + (
|
||||||
|
PROCEDURE="operator_add",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = +
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/index.rs:34
|
||||||
|
-- vectors::postgres::index::vectors_amhandler
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', 'vectors_amhandler_wrapper';
|
||||||
|
CREATE ACCESS METHOD vectors TYPE INDEX HANDLER vectors_amhandler;
|
||||||
|
COMMENT ON ACCESS METHOD vectors IS 'pgvecto.rs index access method';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:82
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gt"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gt_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:82
|
||||||
|
-- vectors::postgres::operators::operator_gt
|
||||||
|
CREATE OPERATOR > (
|
||||||
|
PROCEDURE="operator_gt",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <,
|
||||||
|
NEGATOR = <=,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:133
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_neq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_neq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:133
|
||||||
|
-- vectors::postgres::operators::operator_neq
|
||||||
|
CREATE OPERATOR <> (
|
||||||
|
PROCEDURE="operator_neq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <>,
|
||||||
|
NEGATOR = =,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:65
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_lte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_lte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:65
|
||||||
|
-- vectors::postgres::operators::operator_lte
|
||||||
|
CREATE OPERATOR <= (
|
||||||
|
PROCEDURE="operator_lte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = >=,
|
||||||
|
NEGATOR = >,
|
||||||
|
RESTRICT = scalarltsel,
|
||||||
|
JOIN = scalarltjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_gte"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_gte_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:99
|
||||||
|
-- vectors::postgres::operators::operator_gte
|
||||||
|
CREATE OPERATOR >= (
|
||||||
|
PROCEDURE="operator_gte",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = <=,
|
||||||
|
NEGATOR = <,
|
||||||
|
RESTRICT = scalargtsel,
|
||||||
|
JOIN = scalargtjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:116
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
-- requires:
|
||||||
|
-- vector
|
||||||
|
CREATE FUNCTION "operator_eq"(
|
||||||
|
"lhs" vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
"rhs" vector /* vectors::postgres::datatype::VectorInput */
|
||||||
|
) RETURNS bool /* bool */
|
||||||
|
IMMUTABLE STRICT PARALLEL SAFE
|
||||||
|
LANGUAGE c /* Rust */
|
||||||
|
AS 'MODULE_PATHNAME', 'operator_eq_wrapper';
|
||||||
|
|
||||||
|
-- src/postgres/operators.rs:116
|
||||||
|
-- vectors::postgres::operators::operator_eq
|
||||||
|
CREATE OPERATOR = (
|
||||||
|
PROCEDURE="operator_eq",
|
||||||
|
LEFTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
RIGHTARG=vector, /* vectors::postgres::datatype::VectorInput */
|
||||||
|
COMMUTATOR = =,
|
||||||
|
NEGATOR = <>,
|
||||||
|
RESTRICT = eqsel,
|
||||||
|
JOIN = eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
-- src/lib.rs:17
|
||||||
|
-- finalize
|
||||||
|
CREATE CAST (real[] AS vector)
|
||||||
|
WITH FUNCTION cast_array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE CAST (vector AS real[])
|
||||||
|
WITH FUNCTION cast_vector_to_array(vector, integer, boolean) AS IMPLICIT;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS l2_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS dot_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE OPERATOR CLASS cosine_ops
|
||||||
|
FOR TYPE vector USING vectors AS
|
||||||
|
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops;
|
||||||
|
|
||||||
|
CREATE VIEW pg_vector_index_info AS
|
||||||
|
SELECT
|
||||||
|
C.oid AS tablerelid,
|
||||||
|
I.oid AS indexrelid,
|
||||||
|
C.relname AS tablename,
|
||||||
|
I.relname AS indexname,
|
||||||
|
I.reltuples AS idx_tuples,
|
||||||
|
vector_stat_tuples_done(I.oid) AS idx_tuples_done,
|
||||||
|
vector_stat_config(I.oid) AS idx_config
|
||||||
|
FROM pg_class C JOIN
|
||||||
|
pg_index X ON C.oid = X.indrelid JOIN
|
||||||
|
pg_class I ON I.oid = X.indexrelid JOIN
|
||||||
|
pg_am A ON A.oid = I.relam
|
||||||
|
WHERE A.amname = 'vectors';
|
0
sql/upgrade/.gitkeep
Normal file
0
sql/upgrade/.gitkeep
Normal file
@@ -1,8 +1,5 @@
|
|||||||
use crate::ipc::server::RpcHandler;
|
pub mod normal;
|
||||||
use crate::ipc::IpcError;
|
pub mod upgrade;
|
||||||
use service::worker::Worker;
|
|
||||||
use std::path::{Path, PathBuf};
|
|
||||||
use std::sync::Arc;
|
|
||||||
|
|
||||||
pub unsafe fn init() {
|
pub unsafe fn init() {
|
||||||
use pgrx::bgworkers::BackgroundWorkerBuilder;
|
use pgrx::bgworkers::BackgroundWorkerBuilder;
|
||||||
@@ -47,125 +44,18 @@ pub fn main() {
|
|||||||
}
|
}
|
||||||
log::error!("Panickied. Info: {:?}. Backtrace: {}.", info, backtrace);
|
log::error!("Panickied. Info: {:?}. Backtrace: {}.", info, backtrace);
|
||||||
}));
|
}));
|
||||||
let worker = if Path::new("pg_vectors").try_exists().unwrap() {
|
use service::worker::Worker;
|
||||||
Worker::open(PathBuf::from("pg_vectors"))
|
use std::path::Path;
|
||||||
|
let path = Path::new("pg_vectors");
|
||||||
|
if path.try_exists().unwrap() {
|
||||||
|
if Worker::check(path.to_owned()) {
|
||||||
|
let worker = Worker::open(path.to_owned());
|
||||||
|
self::normal::normal(worker);
|
||||||
|
} else {
|
||||||
|
self::upgrade::upgrade();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Worker::create(PathBuf::from("pg_vectors"))
|
let worker = Worker::create(path.to_owned());
|
||||||
};
|
self::normal::normal(worker);
|
||||||
std::thread::spawn({
|
|
||||||
let worker = worker.clone();
|
|
||||||
move || listen(crate::ipc::listen_unix(), worker)
|
|
||||||
});
|
|
||||||
std::thread::spawn({
|
|
||||||
let worker = worker.clone();
|
|
||||||
move || listen(crate::ipc::listen_mmap(), worker)
|
|
||||||
});
|
|
||||||
loop {
|
|
||||||
let mut sig: i32 = 0;
|
|
||||||
unsafe {
|
|
||||||
let mut set: libc::sigset_t = std::mem::zeroed();
|
|
||||||
libc::sigemptyset(&mut set);
|
|
||||||
libc::sigaddset(&mut set, libc::SIGHUP);
|
|
||||||
libc::sigaddset(&mut set, libc::SIGTERM);
|
|
||||||
libc::sigwait(&set, &mut sig);
|
|
||||||
}
|
|
||||||
match sig {
|
|
||||||
libc::SIGHUP => {
|
|
||||||
std::process::exit(0);
|
|
||||||
}
|
|
||||||
libc::SIGTERM => {
|
|
||||||
std::process::exit(0);
|
|
||||||
}
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn listen(listen: impl Iterator<Item = RpcHandler>, worker: Arc<Worker>) {
|
|
||||||
for rpc_handler in listen {
|
|
||||||
let worker = worker.clone();
|
|
||||||
std::thread::spawn({
|
|
||||||
move || {
|
|
||||||
log::trace!("Session established.");
|
|
||||||
let _ = session(worker, rpc_handler);
|
|
||||||
log::trace!("Session closed.");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn session(worker: Arc<Worker>, mut handler: RpcHandler) -> Result<(), IpcError> {
|
|
||||||
use crate::ipc::server::RpcHandle;
|
|
||||||
loop {
|
|
||||||
match handler.handle()? {
|
|
||||||
RpcHandle::Create { id, options, x } => {
|
|
||||||
worker.call_create(id, options);
|
|
||||||
handler = x.leave()?;
|
|
||||||
}
|
|
||||||
RpcHandle::Insert { id, insert, x } => {
|
|
||||||
let res = worker.call_insert(id, insert);
|
|
||||||
handler = x.leave(res)?;
|
|
||||||
}
|
|
||||||
RpcHandle::Delete { id, mut x } => {
|
|
||||||
let res = worker.call_delete(id, |p| x.next(p).unwrap());
|
|
||||||
handler = x.leave(res)?;
|
|
||||||
}
|
|
||||||
RpcHandle::Search {
|
|
||||||
id,
|
|
||||||
search,
|
|
||||||
prefilter,
|
|
||||||
mut x,
|
|
||||||
} => {
|
|
||||||
if prefilter {
|
|
||||||
let res = worker.call_search(id, search, |p| x.check(p).unwrap());
|
|
||||||
handler = x.leave(res)?;
|
|
||||||
} else {
|
|
||||||
let res = worker.call_search(id, search, |_| true);
|
|
||||||
handler = x.leave(res)?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RpcHandle::Flush { id, x } => {
|
|
||||||
let result = worker.call_flush(id);
|
|
||||||
handler = x.leave(result)?;
|
|
||||||
}
|
|
||||||
RpcHandle::Destory { ids, x } => {
|
|
||||||
worker.call_destory(ids);
|
|
||||||
handler = x.leave()?;
|
|
||||||
}
|
|
||||||
RpcHandle::Stat { id, x } => {
|
|
||||||
let result = worker.call_stat(id);
|
|
||||||
handler = x.leave(result)?;
|
|
||||||
}
|
|
||||||
RpcHandle::Vbase { id, vbase, x } => {
|
|
||||||
use crate::ipc::server::VbaseHandle::*;
|
|
||||||
let instance = match worker.get_instance(id) {
|
|
||||||
Ok(x) => x,
|
|
||||||
Err(e) => {
|
|
||||||
x.error(Err(e))?;
|
|
||||||
break Ok(());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
let view = instance.view();
|
|
||||||
let mut it = match view.vbase(vbase.0, vbase.1) {
|
|
||||||
Ok(x) => x,
|
|
||||||
Err(e) => {
|
|
||||||
x.error(Err(e))?;
|
|
||||||
break Ok(());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
let mut x = x.error(Ok(()))?;
|
|
||||||
loop {
|
|
||||||
match x.handle()? {
|
|
||||||
Next { x: y } => {
|
|
||||||
x = y.leave(it.next())?;
|
|
||||||
}
|
|
||||||
Leave { x } => {
|
|
||||||
handler = x;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
132
src/bgworker/normal.rs
Normal file
132
src/bgworker/normal.rs
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
use crate::ipc::{server::RpcHandler, IpcError};
|
||||||
|
use service::worker::Worker;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
pub fn normal(worker: Arc<Worker>) {
|
||||||
|
std::thread::scope(|scope| {
|
||||||
|
scope.spawn({
|
||||||
|
let worker = worker.clone();
|
||||||
|
move || {
|
||||||
|
for rpc_handler in crate::ipc::listen_unix() {
|
||||||
|
let worker = worker.clone();
|
||||||
|
std::thread::spawn({
|
||||||
|
move || {
|
||||||
|
log::trace!("Session established.");
|
||||||
|
let _ = session(worker, rpc_handler);
|
||||||
|
log::trace!("Session closed.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
scope.spawn({
|
||||||
|
let worker = worker.clone();
|
||||||
|
move || {
|
||||||
|
for rpc_handler in crate::ipc::listen_mmap() {
|
||||||
|
let worker = worker.clone();
|
||||||
|
std::thread::spawn({
|
||||||
|
move || {
|
||||||
|
log::trace!("Session established.");
|
||||||
|
let _ = session(worker, rpc_handler);
|
||||||
|
log::trace!("Session closed.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
loop {
|
||||||
|
let mut sig: i32 = 0;
|
||||||
|
unsafe {
|
||||||
|
let mut set: libc::sigset_t = std::mem::zeroed();
|
||||||
|
libc::sigemptyset(&mut set);
|
||||||
|
libc::sigaddset(&mut set, libc::SIGHUP);
|
||||||
|
libc::sigaddset(&mut set, libc::SIGTERM);
|
||||||
|
libc::sigwait(&set, &mut sig);
|
||||||
|
}
|
||||||
|
match sig {
|
||||||
|
libc::SIGHUP => {
|
||||||
|
std::process::exit(0);
|
||||||
|
}
|
||||||
|
libc::SIGTERM => {
|
||||||
|
std::process::exit(0);
|
||||||
|
}
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
fn session(worker: Arc<Worker>, mut handler: RpcHandler) -> Result<(), IpcError> {
|
||||||
|
use crate::ipc::server::RpcHandle;
|
||||||
|
loop {
|
||||||
|
match handler.handle()? {
|
||||||
|
RpcHandle::Create { id, options, x } => {
|
||||||
|
worker.call_create(id, options);
|
||||||
|
handler = x.leave()?;
|
||||||
|
}
|
||||||
|
RpcHandle::Insert { id, insert, x } => match worker.call_insert(id, insert) {
|
||||||
|
Ok(()) => handler = x.leave()?,
|
||||||
|
Err(res) => x.reset(res)?,
|
||||||
|
},
|
||||||
|
RpcHandle::Delete { id, mut x } => match worker.call_delete(id, |p| x.next(p).unwrap())
|
||||||
|
{
|
||||||
|
Ok(()) => handler = x.leave()?,
|
||||||
|
Err(res) => x.reset(res)?,
|
||||||
|
},
|
||||||
|
RpcHandle::Search {
|
||||||
|
id,
|
||||||
|
search,
|
||||||
|
prefilter: true,
|
||||||
|
mut x,
|
||||||
|
} => match worker.call_search(id, search, |p| x.check(p).unwrap()) {
|
||||||
|
Ok(res) => handler = x.leave(res)?,
|
||||||
|
Err(e) => x.reset(e)?,
|
||||||
|
},
|
||||||
|
RpcHandle::Search {
|
||||||
|
id,
|
||||||
|
search,
|
||||||
|
prefilter: false,
|
||||||
|
x,
|
||||||
|
} => match worker.call_search(id, search, |_| true) {
|
||||||
|
Ok(res) => handler = x.leave(res)?,
|
||||||
|
Err(e) => x.reset(e)?,
|
||||||
|
},
|
||||||
|
RpcHandle::Flush { id, x } => match worker.call_flush(id) {
|
||||||
|
Ok(()) => handler = x.leave()?,
|
||||||
|
Err(e) => x.reset(e)?,
|
||||||
|
},
|
||||||
|
RpcHandle::Destory { ids, x } => {
|
||||||
|
worker.call_destory(ids);
|
||||||
|
handler = x.leave()?;
|
||||||
|
}
|
||||||
|
RpcHandle::Stat { id, x } => match worker.call_stat(id) {
|
||||||
|
Ok(res) => handler = x.leave(res)?,
|
||||||
|
Err(e) => x.reset(e)?,
|
||||||
|
},
|
||||||
|
RpcHandle::Vbase { id, vbase, x } => {
|
||||||
|
use crate::ipc::server::VbaseHandle::*;
|
||||||
|
let instance = match worker.get_instance(id) {
|
||||||
|
Ok(x) => x,
|
||||||
|
Err(e) => x.reset(e)?,
|
||||||
|
};
|
||||||
|
let view = instance.view();
|
||||||
|
let mut it = match view.vbase(vbase.0, vbase.1) {
|
||||||
|
Ok(x) => x,
|
||||||
|
Err(e) => x.reset(e)?,
|
||||||
|
};
|
||||||
|
let mut x = x.error()?;
|
||||||
|
loop {
|
||||||
|
match x.handle()? {
|
||||||
|
Next { x: y } => {
|
||||||
|
x = y.leave(it.next())?;
|
||||||
|
}
|
||||||
|
Leave { x } => {
|
||||||
|
handler = x;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
67
src/bgworker/upgrade.rs
Normal file
67
src/bgworker/upgrade.rs
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
use crate::ipc::server::RpcHandler;
|
||||||
|
use crate::ipc::IpcError;
|
||||||
|
use service::prelude::*;
|
||||||
|
|
||||||
|
pub fn upgrade() {
|
||||||
|
std::thread::scope(|scope| {
|
||||||
|
scope.spawn({
|
||||||
|
move || {
|
||||||
|
for rpc_handler in crate::ipc::listen_unix() {
|
||||||
|
std::thread::spawn({
|
||||||
|
move || {
|
||||||
|
log::trace!("Session established.");
|
||||||
|
let _ = session(rpc_handler);
|
||||||
|
log::trace!("Session closed.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
scope.spawn({
|
||||||
|
move || {
|
||||||
|
for rpc_handler in crate::ipc::listen_mmap() {
|
||||||
|
std::thread::spawn({
|
||||||
|
move || {
|
||||||
|
log::trace!("Session established.");
|
||||||
|
let _ = session(rpc_handler);
|
||||||
|
log::trace!("Session closed.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
loop {
|
||||||
|
let mut sig: i32 = 0;
|
||||||
|
unsafe {
|
||||||
|
let mut set: libc::sigset_t = std::mem::zeroed();
|
||||||
|
libc::sigemptyset(&mut set);
|
||||||
|
libc::sigaddset(&mut set, libc::SIGHUP);
|
||||||
|
libc::sigaddset(&mut set, libc::SIGTERM);
|
||||||
|
libc::sigwait(&set, &mut sig);
|
||||||
|
}
|
||||||
|
match sig {
|
||||||
|
libc::SIGHUP => {
|
||||||
|
std::process::exit(0);
|
||||||
|
}
|
||||||
|
libc::SIGTERM => {
|
||||||
|
std::process::exit(0);
|
||||||
|
}
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
fn session(handler: RpcHandler) -> Result<(), IpcError> {
|
||||||
|
use crate::ipc::server::RpcHandle;
|
||||||
|
match handler.handle()? {
|
||||||
|
RpcHandle::Create { x, .. } => x.reset(FriendlyError::Upgrade)?,
|
||||||
|
RpcHandle::Search { x, .. } => x.reset(FriendlyError::Upgrade)?,
|
||||||
|
RpcHandle::Insert { x, .. } => x.reset(FriendlyError::Upgrade)?,
|
||||||
|
RpcHandle::Delete { x, .. } => x.reset(FriendlyError::Upgrade)?,
|
||||||
|
RpcHandle::Flush { x, .. } => x.reset(FriendlyError::Upgrade)?,
|
||||||
|
RpcHandle::Destory { x, .. } => x.reset(FriendlyError::Upgrade)?,
|
||||||
|
RpcHandle::Stat { x, .. } => x.reset(FriendlyError::Upgrade)?,
|
||||||
|
RpcHandle::Vbase { x, .. } => x.reset(FriendlyError::Upgrade)?,
|
||||||
|
}
|
||||||
|
}
|
@@ -27,9 +27,9 @@ pub unsafe fn init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[pgrx::pg_extern(sql = "
|
#[pgrx::pg_extern(sql = "
|
||||||
CREATE OR REPLACE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
CREATE FUNCTION vectors_amhandler(internal) RETURNS index_am_handler
|
||||||
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', '@FUNCTION_NAME@';
|
PARALLEL SAFE IMMUTABLE STRICT LANGUAGE c AS 'MODULE_PATHNAME', '@FUNCTION_NAME@';
|
||||||
", requires = ["vecf32"])]
|
")]
|
||||||
fn vectors_amhandler(
|
fn vectors_amhandler(
|
||||||
_fcinfo: pgrx::pg_sys::FunctionCallInfo,
|
_fcinfo: pgrx::pg_sys::FunctionCallInfo,
|
||||||
) -> pgrx::PgBox<pgrx::pg_sys::IndexAmRoutine> {
|
) -> pgrx::PgBox<pgrx::pg_sys::IndexAmRoutine> {
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
use super::packet::*;
|
use super::packet::*;
|
||||||
use super::transport::Socket;
|
use super::transport::ClientSocket;
|
||||||
use crate::gucs::{Transport, TRANSPORT};
|
use crate::gucs::{Transport, TRANSPORT};
|
||||||
use crate::utils::cells::PgRefCell;
|
use crate::utils::cells::PgRefCell;
|
||||||
use service::index::IndexOptions;
|
use service::index::IndexOptions;
|
||||||
@@ -12,8 +12,8 @@ use std::ops::DerefMut;
|
|||||||
pub trait ClientLike: 'static {
|
pub trait ClientLike: 'static {
|
||||||
const RESET: bool = false;
|
const RESET: bool = false;
|
||||||
|
|
||||||
fn from_socket(socket: Socket) -> Self;
|
fn from_socket(socket: ClientSocket) -> Self;
|
||||||
fn to_socket(self) -> Socket;
|
fn to_socket(self) -> ClientSocket;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ClientGuard<T: ClientLike>(pub ManuallyDrop<T>);
|
pub struct ClientGuard<T: ClientLike>(pub ManuallyDrop<T>);
|
||||||
@@ -43,17 +43,17 @@ impl<T: ClientLike> DerefMut for ClientGuard<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub struct Rpc {
|
pub struct Rpc {
|
||||||
socket: Socket,
|
socket: ClientSocket,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Rpc {
|
impl Rpc {
|
||||||
pub fn new(socket: Socket) -> Self {
|
pub fn new(socket: ClientSocket) -> Self {
|
||||||
Self { socket }
|
Self { socket }
|
||||||
}
|
}
|
||||||
pub fn create(self: &mut ClientGuard<Self>, id: Id, options: IndexOptions) {
|
pub fn create(self: &mut ClientGuard<Self>, id: Id, options: IndexOptions) {
|
||||||
let packet = RpcPacket::Create { id, options };
|
let packet = RpcPacket::Create { id, options };
|
||||||
self.socket.client_send(packet).friendly();
|
self.socket.send(packet).friendly();
|
||||||
let create::CreatePacket::Leave {} = self.socket.client_recv().friendly();
|
let create::CreatePacket::Leave {} = self.socket.recv().friendly();
|
||||||
}
|
}
|
||||||
pub fn search(
|
pub fn search(
|
||||||
self: &mut ClientGuard<Self>,
|
self: &mut ClientGuard<Self>,
|
||||||
@@ -67,58 +67,56 @@ impl Rpc {
|
|||||||
search,
|
search,
|
||||||
prefilter,
|
prefilter,
|
||||||
};
|
};
|
||||||
self.socket.client_send(packet).friendly();
|
self.socket.send(packet).friendly();
|
||||||
loop {
|
loop {
|
||||||
match self.socket.client_recv().friendly() {
|
match self.socket.recv().friendly() {
|
||||||
search::SearchPacket::Check { p } => {
|
search::SearchPacket::Check { p } => {
|
||||||
self.socket
|
self.socket
|
||||||
.client_send(search::SearchCheckPacket { result: t.check(p) })
|
.send(search::SearchCheckPacket { result: t.check(p) })
|
||||||
.friendly();
|
.friendly();
|
||||||
}
|
}
|
||||||
search::SearchPacket::Leave { result } => {
|
search::SearchPacket::Leave { result } => {
|
||||||
return result.friendly();
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn delete(self: &mut ClientGuard<Self>, id: Id, mut t: impl Delete) {
|
pub fn delete(self: &mut ClientGuard<Self>, id: Id, mut t: impl Delete) {
|
||||||
let packet = RpcPacket::Delete { id };
|
let packet = RpcPacket::Delete { id };
|
||||||
self.socket.client_send(packet).friendly();
|
self.socket.send(packet).friendly();
|
||||||
loop {
|
loop {
|
||||||
match self.socket.client_recv().friendly() {
|
match self.socket.recv().friendly() {
|
||||||
delete::DeletePacket::Test { p } => {
|
delete::DeletePacket::Test { p } => {
|
||||||
self.socket
|
self.socket
|
||||||
.client_send(delete::DeleteTestPacket { delete: t.test(p) })
|
.send(delete::DeleteTestPacket { delete: t.test(p) })
|
||||||
.friendly();
|
.friendly();
|
||||||
}
|
}
|
||||||
delete::DeletePacket::Leave { result } => {
|
delete::DeletePacket::Leave {} => {
|
||||||
return result.friendly();
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn insert(self: &mut ClientGuard<Self>, id: Id, insert: (DynamicVector, Pointer)) {
|
pub fn insert(self: &mut ClientGuard<Self>, id: Id, insert: (DynamicVector, Pointer)) {
|
||||||
let packet = RpcPacket::Insert { id, insert };
|
let packet = RpcPacket::Insert { id, insert };
|
||||||
self.socket.client_send(packet).friendly();
|
self.socket.send(packet).friendly();
|
||||||
let insert::InsertPacket::Leave { result } = self.socket.client_recv().friendly();
|
let insert::InsertPacket::Leave {} = self.socket.recv().friendly();
|
||||||
result.friendly()
|
|
||||||
}
|
}
|
||||||
pub fn flush(self: &mut ClientGuard<Self>, id: Id) {
|
pub fn flush(self: &mut ClientGuard<Self>, id: Id) {
|
||||||
let packet = RpcPacket::Flush { id };
|
let packet = RpcPacket::Flush { id };
|
||||||
self.socket.client_send(packet).friendly();
|
self.socket.send(packet).friendly();
|
||||||
let flush::FlushPacket::Leave { result } = self.socket.client_recv().friendly();
|
let flush::FlushPacket::Leave {} = self.socket.recv().friendly();
|
||||||
result.friendly()
|
|
||||||
}
|
}
|
||||||
pub fn destory(self: &mut ClientGuard<Self>, ids: Vec<Id>) {
|
pub fn destory(self: &mut ClientGuard<Self>, ids: Vec<Id>) {
|
||||||
let packet = RpcPacket::Destory { ids };
|
let packet = RpcPacket::Destory { ids };
|
||||||
self.socket.client_send(packet).friendly();
|
self.socket.send(packet).friendly();
|
||||||
let destory::DestoryPacket::Leave {} = self.socket.client_recv().friendly();
|
let destory::DestoryPacket::Leave {} = self.socket.recv().friendly();
|
||||||
}
|
}
|
||||||
pub fn stat(self: &mut ClientGuard<Self>, id: Id) -> IndexStat {
|
pub fn stat(self: &mut ClientGuard<Self>, id: Id) -> IndexStat {
|
||||||
let packet = RpcPacket::Stat { id };
|
let packet = RpcPacket::Stat { id };
|
||||||
self.socket.client_send(packet).friendly();
|
self.socket.send(packet).friendly();
|
||||||
let stat::StatPacket::Leave { result } = self.socket.client_recv().friendly();
|
let stat::StatPacket::Leave { result } = self.socket.recv().friendly();
|
||||||
result.friendly()
|
result
|
||||||
}
|
}
|
||||||
pub fn vbase(
|
pub fn vbase(
|
||||||
mut self: ClientGuard<Self>,
|
mut self: ClientGuard<Self>,
|
||||||
@@ -126,9 +124,8 @@ impl Rpc {
|
|||||||
vbase: (DynamicVector, usize),
|
vbase: (DynamicVector, usize),
|
||||||
) -> ClientGuard<Vbase> {
|
) -> ClientGuard<Vbase> {
|
||||||
let packet = RpcPacket::Vbase { id, vbase };
|
let packet = RpcPacket::Vbase { id, vbase };
|
||||||
self.socket.client_send(packet).friendly();
|
self.socket.send(packet).friendly();
|
||||||
let vbase::VbaseErrorPacket { result } = self.socket.client_recv().friendly();
|
let vbase::VbaseErrorPacket {} = self.socket.recv().friendly();
|
||||||
result.friendly();
|
|
||||||
ClientGuard::map(self)
|
ClientGuard::map(self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -136,11 +133,11 @@ impl Rpc {
|
|||||||
impl ClientLike for Rpc {
|
impl ClientLike for Rpc {
|
||||||
const RESET: bool = true;
|
const RESET: bool = true;
|
||||||
|
|
||||||
fn from_socket(socket: Socket) -> Self {
|
fn from_socket(socket: ClientSocket) -> Self {
|
||||||
Self { socket }
|
Self { socket }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn to_socket(self) -> Socket {
|
fn to_socket(self) -> ClientSocket {
|
||||||
self.socket
|
self.socket
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -154,30 +151,30 @@ pub trait Delete {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub struct Vbase {
|
pub struct Vbase {
|
||||||
socket: Socket,
|
socket: ClientSocket,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Vbase {
|
impl Vbase {
|
||||||
pub fn next(self: &mut ClientGuard<Self>) -> Option<Pointer> {
|
pub fn next(self: &mut ClientGuard<Self>) -> Option<Pointer> {
|
||||||
let packet = vbase::VbasePacket::Next {};
|
let packet = vbase::VbasePacket::Next {};
|
||||||
self.socket.client_send(packet).friendly();
|
self.socket.send(packet).friendly();
|
||||||
let vbase::VbaseNextPacket { p } = self.socket.client_recv().friendly();
|
let vbase::VbaseNextPacket { p } = self.socket.recv().friendly();
|
||||||
p
|
p
|
||||||
}
|
}
|
||||||
pub fn leave(mut self: ClientGuard<Self>) -> ClientGuard<Rpc> {
|
pub fn leave(mut self: ClientGuard<Self>) -> ClientGuard<Rpc> {
|
||||||
let packet = vbase::VbasePacket::Leave {};
|
let packet = vbase::VbasePacket::Leave {};
|
||||||
self.socket.client_send(packet).friendly();
|
self.socket.send(packet).friendly();
|
||||||
let vbase::VbaseLeavePacket {} = self.socket.client_recv().friendly();
|
let vbase::VbaseLeavePacket {} = self.socket.recv().friendly();
|
||||||
ClientGuard::map(self)
|
ClientGuard::map(self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ClientLike for Vbase {
|
impl ClientLike for Vbase {
|
||||||
fn from_socket(socket: Socket) -> Self {
|
fn from_socket(socket: ClientSocket) -> Self {
|
||||||
Self { socket }
|
Self { socket }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn to_socket(self) -> Socket {
|
fn to_socket(self) -> ClientSocket {
|
||||||
self.socket
|
self.socket
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -185,7 +182,7 @@ impl ClientLike for Vbase {
|
|||||||
enum Status {
|
enum Status {
|
||||||
Borrowed,
|
Borrowed,
|
||||||
Lost,
|
Lost,
|
||||||
Reset(Socket),
|
Reset(ClientSocket),
|
||||||
}
|
}
|
||||||
|
|
||||||
static CLIENT: PgRefCell<Status> = unsafe { PgRefCell::new(Status::Lost) };
|
static CLIENT: PgRefCell<Status> = unsafe { PgRefCell::new(Status::Lost) };
|
||||||
@@ -224,10 +221,9 @@ impl<T: ClientLike> Drop for ClientGuard<T> {
|
|||||||
let mut x = CLIENT.borrow_mut();
|
let mut x = CLIENT.borrow_mut();
|
||||||
match *x {
|
match *x {
|
||||||
Status::Borrowed => {
|
Status::Borrowed => {
|
||||||
if T::RESET {
|
let socket = unsafe { ManuallyDrop::take(&mut self.0).to_socket() };
|
||||||
unsafe {
|
if T::RESET && socket.test() {
|
||||||
*x = Status::Reset(ManuallyDrop::take(&mut self.0).to_socket());
|
*x = Status::Reset(socket);
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
*x = Status::Lost;
|
*x = Status::Lost;
|
||||||
}
|
}
|
||||||
|
@@ -8,42 +8,43 @@ use service::prelude::*;
|
|||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Error)]
|
#[derive(Debug, Clone, Error)]
|
||||||
#[rustfmt::skip]
|
|
||||||
pub enum IpcError {
|
pub enum IpcError {
|
||||||
#[error("\
|
#[error("IPC connection is closed unexpected.")]
|
||||||
pgvecto.rs: IPC connection is closed unexpected.
|
|
||||||
ADVICE: The error is raisen by background worker errors. \
|
|
||||||
Please check the full Postgresql log to get more information.\
|
|
||||||
")]
|
|
||||||
Closed,
|
Closed,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FriendlyErrorLike for IpcError {
|
impl FriendlyErrorLike for IpcError {
|
||||||
fn friendly(self) -> ! {
|
fn convert(self) -> FriendlyError {
|
||||||
panic!("pgvecto.rs: {}", self);
|
FriendlyError::Ipc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn listen_unix() -> impl Iterator<Item = RpcHandler> {
|
pub fn listen_unix() -> impl Iterator<Item = RpcHandler> {
|
||||||
std::iter::from_fn(move || {
|
std::iter::from_fn(move || {
|
||||||
let socket = self::transport::Socket::Unix(self::transport::unix::accept());
|
let socket = self::transport::ServerSocket::Unix(self::transport::unix::accept());
|
||||||
Some(self::server::RpcHandler::new(socket))
|
Some(self::server::RpcHandler::new(socket))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn listen_mmap() -> impl Iterator<Item = RpcHandler> {
|
pub fn listen_mmap() -> impl Iterator<Item = RpcHandler> {
|
||||||
std::iter::from_fn(move || {
|
std::iter::from_fn(move || {
|
||||||
let socket = self::transport::Socket::Mmap(self::transport::mmap::accept());
|
let socket = self::transport::ServerSocket::Mmap(self::transport::mmap::accept());
|
||||||
Some(self::server::RpcHandler::new(socket))
|
Some(self::server::RpcHandler::new(socket))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn connect_unix() -> self::transport::Socket {
|
pub fn connect_unix() -> self::transport::ClientSocket {
|
||||||
self::transport::Socket::Unix(self::transport::unix::connect())
|
self::transport::ClientSocket::Unix {
|
||||||
|
ok: true,
|
||||||
|
socket: self::transport::unix::connect(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn connect_mmap() -> self::transport::Socket {
|
pub fn connect_mmap() -> self::transport::ClientSocket {
|
||||||
self::transport::Socket::Mmap(self::transport::mmap::connect())
|
self::transport::ClientSocket::Mmap {
|
||||||
|
ok: true,
|
||||||
|
socket: self::transport::mmap::connect(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn init() {
|
pub fn init() {
|
||||||
|
@@ -4,7 +4,7 @@ use service::prelude::*;
|
|||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub enum DeletePacket {
|
pub enum DeletePacket {
|
||||||
Test { p: Pointer },
|
Test { p: Pointer },
|
||||||
Leave { result: Result<(), FriendlyError> },
|
Leave {},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use service::prelude::*;
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub enum FlushPacket {
|
pub enum FlushPacket {
|
||||||
Leave { result: Result<(), FriendlyError> },
|
Leave {},
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use service::prelude::*;
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub enum InsertPacket {
|
pub enum InsertPacket {
|
||||||
Leave { result: Result<(), FriendlyError> },
|
Leave {},
|
||||||
}
|
}
|
||||||
|
@@ -3,12 +3,8 @@ use service::prelude::*;
|
|||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub enum SearchPacket {
|
pub enum SearchPacket {
|
||||||
Check {
|
Check { p: Pointer },
|
||||||
p: Pointer,
|
Leave { result: Vec<Pointer> },
|
||||||
},
|
|
||||||
Leave {
|
|
||||||
result: Result<Vec<Pointer>, FriendlyError>,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
@@ -1,10 +1,7 @@
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use service::index::IndexStat;
|
use service::index::IndexStat;
|
||||||
use service::prelude::*;
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub enum StatPacket {
|
pub enum StatPacket {
|
||||||
Leave {
|
Leave { result: IndexStat },
|
||||||
result: Result<IndexStat, FriendlyError>,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
@@ -2,9 +2,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
use service::prelude::*;
|
use service::prelude::*;
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub struct VbaseErrorPacket {
|
pub struct VbaseErrorPacket {}
|
||||||
pub result: Result<(), FriendlyError>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub enum VbasePacket {
|
pub enum VbasePacket {
|
||||||
|
@@ -1,20 +1,20 @@
|
|||||||
use super::packet::*;
|
use super::packet::*;
|
||||||
use super::transport::Socket;
|
use super::transport::ServerSocket;
|
||||||
use super::IpcError;
|
use super::IpcError;
|
||||||
use service::index::IndexOptions;
|
use service::index::IndexOptions;
|
||||||
use service::index::IndexStat;
|
use service::index::IndexStat;
|
||||||
use service::prelude::*;
|
use service::prelude::*;
|
||||||
|
|
||||||
pub struct RpcHandler {
|
pub struct RpcHandler {
|
||||||
socket: Socket,
|
socket: ServerSocket,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RpcHandler {
|
impl RpcHandler {
|
||||||
pub(super) fn new(socket: Socket) -> Self {
|
pub(super) fn new(socket: ServerSocket) -> Self {
|
||||||
Self { socket }
|
Self { socket }
|
||||||
}
|
}
|
||||||
pub fn handle(mut self) -> Result<RpcHandle, IpcError> {
|
pub fn handle(mut self) -> Result<RpcHandle, IpcError> {
|
||||||
Ok(match self.socket.server_recv::<RpcPacket>()? {
|
Ok(match self.socket.recv::<RpcPacket>()? {
|
||||||
RpcPacket::Create { id, options } => RpcHandle::Create {
|
RpcPacket::Create { id, options } => RpcHandle::Create {
|
||||||
id,
|
id,
|
||||||
options,
|
options,
|
||||||
@@ -117,151 +117,167 @@ pub enum RpcHandle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub struct Create {
|
pub struct Create {
|
||||||
socket: Socket,
|
socket: ServerSocket,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Create {
|
impl Create {
|
||||||
pub fn leave(mut self) -> Result<RpcHandler, IpcError> {
|
pub fn leave(mut self) -> Result<RpcHandler, IpcError> {
|
||||||
let packet = create::CreatePacket::Leave {};
|
let packet = create::CreatePacket::Leave {};
|
||||||
self.socket.server_send(packet)?;
|
self.socket.ok(packet)?;
|
||||||
Ok(RpcHandler {
|
Ok(RpcHandler {
|
||||||
socket: self.socket,
|
socket: self.socket,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
pub fn reset(mut self, err: FriendlyError) -> Result<!, IpcError> {
|
||||||
|
self.socket.err(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Insert {
|
pub struct Insert {
|
||||||
socket: Socket,
|
socket: ServerSocket,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Insert {
|
impl Insert {
|
||||||
pub fn leave(mut self, result: Result<(), FriendlyError>) -> Result<RpcHandler, IpcError> {
|
pub fn leave(mut self) -> Result<RpcHandler, IpcError> {
|
||||||
let packet = insert::InsertPacket::Leave { result };
|
let packet = insert::InsertPacket::Leave {};
|
||||||
self.socket.server_send(packet)?;
|
self.socket.ok(packet)?;
|
||||||
Ok(RpcHandler {
|
Ok(RpcHandler {
|
||||||
socket: self.socket,
|
socket: self.socket,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
pub fn reset(mut self, err: FriendlyError) -> Result<!, IpcError> {
|
||||||
|
self.socket.err(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Delete {
|
pub struct Delete {
|
||||||
socket: Socket,
|
socket: ServerSocket,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Delete {
|
impl Delete {
|
||||||
pub fn next(&mut self, p: Pointer) -> Result<bool, IpcError> {
|
pub fn next(&mut self, p: Pointer) -> Result<bool, IpcError> {
|
||||||
let packet = delete::DeletePacket::Test { p };
|
let packet = delete::DeletePacket::Test { p };
|
||||||
self.socket.server_send(packet)?;
|
self.socket.ok(packet)?;
|
||||||
let delete::DeleteTestPacket { delete } =
|
let delete::DeleteTestPacket { delete } = self.socket.recv::<delete::DeleteTestPacket>()?;
|
||||||
self.socket.server_recv::<delete::DeleteTestPacket>()?;
|
|
||||||
Ok(delete)
|
Ok(delete)
|
||||||
}
|
}
|
||||||
pub fn leave(mut self, result: Result<(), FriendlyError>) -> Result<RpcHandler, IpcError> {
|
pub fn leave(mut self) -> Result<RpcHandler, IpcError> {
|
||||||
let packet = delete::DeletePacket::Leave { result };
|
let packet = delete::DeletePacket::Leave {};
|
||||||
self.socket.server_send(packet)?;
|
self.socket.ok(packet)?;
|
||||||
Ok(RpcHandler {
|
Ok(RpcHandler {
|
||||||
socket: self.socket,
|
socket: self.socket,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
pub fn reset(mut self, err: FriendlyError) -> Result<!, IpcError> {
|
||||||
|
self.socket.err(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Search {
|
pub struct Search {
|
||||||
socket: Socket,
|
socket: ServerSocket,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Search {
|
impl Search {
|
||||||
pub fn check(&mut self, p: Pointer) -> Result<bool, IpcError> {
|
pub fn check(&mut self, p: Pointer) -> Result<bool, IpcError> {
|
||||||
let packet = search::SearchPacket::Check { p };
|
let packet = search::SearchPacket::Check { p };
|
||||||
self.socket.server_send(packet)?;
|
self.socket.ok(packet)?;
|
||||||
let search::SearchCheckPacket { result } =
|
let search::SearchCheckPacket { result } =
|
||||||
self.socket.server_recv::<search::SearchCheckPacket>()?;
|
self.socket.recv::<search::SearchCheckPacket>()?;
|
||||||
Ok(result)
|
Ok(result)
|
||||||
}
|
}
|
||||||
pub fn leave(
|
pub fn leave(mut self, result: Vec<Pointer>) -> Result<RpcHandler, IpcError> {
|
||||||
mut self,
|
|
||||||
result: Result<Vec<Pointer>, FriendlyError>,
|
|
||||||
) -> Result<RpcHandler, IpcError> {
|
|
||||||
let packet = search::SearchPacket::Leave { result };
|
let packet = search::SearchPacket::Leave { result };
|
||||||
self.socket.server_send(packet)?;
|
self.socket.ok(packet)?;
|
||||||
Ok(RpcHandler {
|
Ok(RpcHandler {
|
||||||
socket: self.socket,
|
socket: self.socket,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
pub fn reset(mut self, err: FriendlyError) -> Result<!, IpcError> {
|
||||||
|
self.socket.err(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Flush {
|
pub struct Flush {
|
||||||
socket: Socket,
|
socket: ServerSocket,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Flush {
|
impl Flush {
|
||||||
pub fn leave(mut self, result: Result<(), FriendlyError>) -> Result<RpcHandler, IpcError> {
|
pub fn leave(mut self) -> Result<RpcHandler, IpcError> {
|
||||||
let packet = flush::FlushPacket::Leave { result };
|
let packet = flush::FlushPacket::Leave {};
|
||||||
self.socket.server_send(packet)?;
|
self.socket.ok(packet)?;
|
||||||
Ok(RpcHandler {
|
Ok(RpcHandler {
|
||||||
socket: self.socket,
|
socket: self.socket,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
pub fn reset(mut self, err: FriendlyError) -> Result<!, IpcError> {
|
||||||
|
self.socket.err(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Destory {
|
pub struct Destory {
|
||||||
socket: Socket,
|
socket: ServerSocket,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Destory {
|
impl Destory {
|
||||||
pub fn leave(mut self) -> Result<RpcHandler, IpcError> {
|
pub fn leave(mut self) -> Result<RpcHandler, IpcError> {
|
||||||
let packet = destory::DestoryPacket::Leave {};
|
let packet = destory::DestoryPacket::Leave {};
|
||||||
self.socket.server_send(packet)?;
|
self.socket.ok(packet)?;
|
||||||
Ok(RpcHandler {
|
Ok(RpcHandler {
|
||||||
socket: self.socket,
|
socket: self.socket,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
pub fn reset(mut self, err: FriendlyError) -> Result<!, IpcError> {
|
||||||
|
self.socket.err(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Stat {
|
pub struct Stat {
|
||||||
socket: Socket,
|
socket: ServerSocket,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Stat {
|
impl Stat {
|
||||||
pub fn leave(
|
pub fn leave(mut self, result: IndexStat) -> Result<RpcHandler, IpcError> {
|
||||||
mut self,
|
|
||||||
result: Result<IndexStat, FriendlyError>,
|
|
||||||
) -> Result<RpcHandler, IpcError> {
|
|
||||||
let packet = stat::StatPacket::Leave { result };
|
let packet = stat::StatPacket::Leave { result };
|
||||||
self.socket.server_send(packet)?;
|
self.socket.ok(packet)?;
|
||||||
Ok(RpcHandler {
|
Ok(RpcHandler {
|
||||||
socket: self.socket,
|
socket: self.socket,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
pub fn reset(mut self, err: FriendlyError) -> Result<!, IpcError> {
|
||||||
|
self.socket.err(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Vbase {
|
pub struct Vbase {
|
||||||
socket: Socket,
|
socket: ServerSocket,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Vbase {
|
impl Vbase {
|
||||||
pub fn error(mut self, result: Result<(), FriendlyError>) -> Result<VbaseHandler, IpcError> {
|
pub fn error(mut self) -> Result<VbaseHandler, IpcError> {
|
||||||
self.socket
|
self.socket.ok(vbase::VbaseErrorPacket {})?;
|
||||||
.server_send(vbase::VbaseErrorPacket { result })?;
|
|
||||||
Ok(VbaseHandler {
|
Ok(VbaseHandler {
|
||||||
socket: self.socket,
|
socket: self.socket,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
pub fn reset(mut self, err: FriendlyError) -> Result<!, IpcError> {
|
||||||
|
self.socket.err(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct VbaseHandler {
|
pub struct VbaseHandler {
|
||||||
socket: Socket,
|
socket: ServerSocket,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl VbaseHandler {
|
impl VbaseHandler {
|
||||||
pub fn handle(mut self) -> Result<VbaseHandle, IpcError> {
|
pub fn handle(mut self) -> Result<VbaseHandle, IpcError> {
|
||||||
Ok(match self.socket.server_recv::<vbase::VbasePacket>()? {
|
Ok(match self.socket.recv::<vbase::VbasePacket>()? {
|
||||||
vbase::VbasePacket::Next {} => VbaseHandle::Next {
|
vbase::VbasePacket::Next {} => VbaseHandle::Next {
|
||||||
x: VbaseNext {
|
x: VbaseNext {
|
||||||
socket: self.socket,
|
socket: self.socket,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
vbase::VbasePacket::Leave {} => {
|
vbase::VbasePacket::Leave {} => {
|
||||||
self.socket.server_send(vbase::VbaseLeavePacket {})?;
|
self.socket.ok(vbase::VbaseLeavePacket {})?;
|
||||||
VbaseHandle::Leave {
|
VbaseHandle::Leave {
|
||||||
x: RpcHandler {
|
x: RpcHandler {
|
||||||
socket: self.socket,
|
socket: self.socket,
|
||||||
@@ -278,13 +294,13 @@ pub enum VbaseHandle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub struct VbaseNext {
|
pub struct VbaseNext {
|
||||||
socket: Socket,
|
socket: ServerSocket,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl VbaseNext {
|
impl VbaseNext {
|
||||||
pub fn leave(mut self, p: Option<Pointer>) -> Result<VbaseHandler, IpcError> {
|
pub fn leave(mut self, p: Option<Pointer>) -> Result<VbaseHandler, IpcError> {
|
||||||
let packet = vbase::VbaseNextPacket { p };
|
let packet = vbase::VbaseNextPacket { p };
|
||||||
self.socket.server_send(packet)?;
|
self.socket.ok(packet)?;
|
||||||
Ok(VbaseHandler {
|
Ok(VbaseHandler {
|
||||||
socket: self.socket,
|
socket: self.socket,
|
||||||
})
|
})
|
||||||
|
@@ -3,7 +3,6 @@ use crate::utils::file_socket::FileSocket;
|
|||||||
use crate::utils::os::{futex_wait, futex_wake, memfd_create, mmap_populate};
|
use crate::utils::os::{futex_wait, futex_wake, memfd_create, mmap_populate};
|
||||||
use rustix::fd::{AsFd, OwnedFd};
|
use rustix::fd::{AsFd, OwnedFd};
|
||||||
use rustix::fs::FlockOperation;
|
use rustix::fs::FlockOperation;
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
use std::cell::UnsafeCell;
|
use std::cell::UnsafeCell;
|
||||||
use std::io::ErrorKind;
|
use std::io::ErrorKind;
|
||||||
use std::sync::atomic::{AtomicU32, Ordering};
|
use std::sync::atomic::{AtomicU32, Ordering};
|
||||||
@@ -65,27 +64,25 @@ impl Socket {
|
|||||||
Err(e) => panic!("{:?}", e),
|
Err(e) => panic!("{:?}", e),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn send<T: Serialize>(&mut self, packet: T) -> Result<(), IpcError> {
|
pub fn send(&mut self, packet: &[u8]) -> Result<(), IpcError> {
|
||||||
let buffer = bincode::serialize(&packet).expect("Failed to serialize");
|
|
||||||
unsafe {
|
unsafe {
|
||||||
if self.is_server {
|
if self.is_server {
|
||||||
(*self.addr).server_send(&buffer);
|
(*self.addr).server_send(packet);
|
||||||
} else {
|
} else {
|
||||||
(*self.addr).client_send(&buffer);
|
(*self.addr).client_send(packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
pub fn recv<T: for<'a> Deserialize<'a>>(&mut self) -> Result<T, IpcError> {
|
pub fn recv(&mut self) -> Result<Vec<u8>, IpcError> {
|
||||||
let buffer = unsafe {
|
let packet = unsafe {
|
||||||
if self.is_server {
|
if self.is_server {
|
||||||
(*self.addr).server_recv(|| self.test())?
|
(*self.addr).server_recv(|| self.test())?
|
||||||
} else {
|
} else {
|
||||||
(*self.addr).client_recv(|| self.test())?
|
(*self.addr).client_recv(|| self.test())?
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let result = bincode::deserialize::<T>(&buffer).expect("Failed to deserialize");
|
Ok(packet)
|
||||||
Ok(result)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3,35 +3,76 @@ pub mod unix;
|
|||||||
|
|
||||||
use super::IpcError;
|
use super::IpcError;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use service::prelude::FriendlyError;
|
||||||
|
|
||||||
pub enum Socket {
|
pub enum ServerSocket {
|
||||||
Unix(unix::Socket),
|
Unix(unix::Socket),
|
||||||
Mmap(mmap::Socket),
|
Mmap(mmap::Socket),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Socket {
|
pub enum ClientSocket {
|
||||||
pub fn client_send<T: Serialize>(&mut self, packet: T) -> Result<(), IpcError> {
|
Unix { ok: bool, socket: unix::Socket },
|
||||||
|
Mmap { ok: bool, socket: mmap::Socket },
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ServerSocket {
|
||||||
|
pub fn ok<T: Serialize>(&mut self, packet: T) -> Result<(), IpcError> {
|
||||||
|
let mut buffer = Vec::new();
|
||||||
|
buffer.push(0u8);
|
||||||
|
buffer.extend(bincode::serialize(&packet).expect("Failed to serialize"));
|
||||||
match self {
|
match self {
|
||||||
Socket::Unix(x) => x.send(packet),
|
Self::Unix(x) => x.send(&buffer),
|
||||||
Socket::Mmap(x) => x.send(packet),
|
Self::Mmap(x) => x.send(&buffer),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn client_recv<T: for<'a> Deserialize<'a>>(&mut self) -> Result<T, IpcError> {
|
pub fn err(&mut self, err: FriendlyError) -> Result<!, IpcError> {
|
||||||
|
let mut buffer = Vec::new();
|
||||||
|
buffer.push(1u8);
|
||||||
|
buffer.extend(bincode::serialize(&err).expect("Failed to serialize"));
|
||||||
match self {
|
match self {
|
||||||
Socket::Unix(x) => x.recv(),
|
Self::Unix(x) => x.send(&buffer)?,
|
||||||
Socket::Mmap(x) => x.recv(),
|
Self::Mmap(x) => x.send(&buffer)?,
|
||||||
|
}
|
||||||
|
Err(IpcError::Closed)
|
||||||
|
}
|
||||||
|
pub fn recv<T: for<'a> Deserialize<'a>>(&mut self) -> Result<T, IpcError> {
|
||||||
|
let buffer = match self {
|
||||||
|
Self::Unix(x) => x.recv()?,
|
||||||
|
Self::Mmap(x) => x.recv()?,
|
||||||
|
};
|
||||||
|
Ok(bincode::deserialize(&buffer).expect("Failed to deserialize."))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ClientSocket {
|
||||||
|
pub fn send<T: Serialize>(&mut self, packet: T) -> Result<(), IpcError> {
|
||||||
|
let buffer = bincode::serialize(&packet).expect("Failed to serialize");
|
||||||
|
match self {
|
||||||
|
Self::Unix { ok, socket } => socket.send(&buffer).inspect(|_| *ok = false),
|
||||||
|
Self::Mmap { ok, socket } => socket.send(&buffer).inspect(|_| *ok = false),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn server_send<T: Serialize>(&mut self, packet: T) -> Result<(), IpcError> {
|
pub fn recv<T: for<'a> Deserialize<'a>>(&mut self) -> Result<T, FriendlyError> {
|
||||||
match self {
|
let buffer = match self {
|
||||||
Socket::Unix(x) => x.send(packet),
|
Self::Unix { ok, socket } => socket
|
||||||
Socket::Mmap(x) => x.send(packet),
|
.recv()
|
||||||
|
.inspect(|_| *ok = false)
|
||||||
|
.map_err(|_| FriendlyError::Ipc)?,
|
||||||
|
Self::Mmap { ok, socket } => socket
|
||||||
|
.recv()
|
||||||
|
.inspect(|_| *ok = false)
|
||||||
|
.map_err(|_| FriendlyError::Ipc)?,
|
||||||
|
};
|
||||||
|
match buffer[0] {
|
||||||
|
0u8 => Ok(bincode::deserialize(&buffer[1..]).expect("Failed to deserialize.")),
|
||||||
|
1u8 => Err(bincode::deserialize(&buffer[1..]).expect("Failed to deserialize.")),
|
||||||
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn server_recv<T: for<'a> Deserialize<'a>>(&mut self) -> Result<T, IpcError> {
|
pub fn test(&self) -> bool {
|
||||||
match self {
|
match self {
|
||||||
Socket::Unix(x) => x.recv(),
|
ClientSocket::Unix { ok, .. } => *ok,
|
||||||
Socket::Mmap(x) => x.recv(),
|
ClientSocket::Mmap { ok, .. } => *ok,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,6 @@ use super::IpcError;
|
|||||||
use crate::utils::file_socket::FileSocket;
|
use crate::utils::file_socket::FileSocket;
|
||||||
use byteorder::{ReadBytesExt, WriteBytesExt};
|
use byteorder::{ReadBytesExt, WriteBytesExt};
|
||||||
use rustix::fd::AsFd;
|
use rustix::fd::AsFd;
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
use std::io::{Read, Write};
|
use std::io::{Read, Write};
|
||||||
use std::os::unix::net::UnixStream;
|
use std::os::unix::net::UnixStream;
|
||||||
use std::sync::OnceLock;
|
use std::sync::OnceLock;
|
||||||
@@ -40,20 +39,18 @@ macro_rules! resolve_closed {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Socket {
|
impl Socket {
|
||||||
pub fn send<T: Serialize>(&mut self, packet: T) -> Result<(), IpcError> {
|
pub fn send(&mut self, packet: &[u8]) -> Result<(), IpcError> {
|
||||||
use byteorder::NativeEndian as N;
|
use byteorder::NativeEndian as N;
|
||||||
let buffer = bincode::serialize(&packet).expect("Failed to serialize");
|
let len = u32::try_from(packet.len()).expect("Packet is too large.");
|
||||||
let len = u32::try_from(buffer.len()).expect("Packet is too large.");
|
|
||||||
resolve_closed!(self.stream.write_u32::<N>(len));
|
resolve_closed!(self.stream.write_u32::<N>(len));
|
||||||
resolve_closed!(self.stream.write_all(&buffer));
|
resolve_closed!(self.stream.write_all(packet));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
pub fn recv<T: for<'a> Deserialize<'a>>(&mut self) -> Result<T, IpcError> {
|
pub fn recv(&mut self) -> Result<Vec<u8>, IpcError> {
|
||||||
use byteorder::NativeEndian as N;
|
use byteorder::NativeEndian as N;
|
||||||
let len = resolve_closed!(self.stream.read_u32::<N>());
|
let len = resolve_closed!(self.stream.read_u32::<N>());
|
||||||
let mut buffer = vec![0u8; len as usize];
|
let mut packet = vec![0u8; len as usize];
|
||||||
resolve_closed!(self.stream.read_exact(&mut buffer));
|
resolve_closed!(self.stream.read_exact(&mut packet));
|
||||||
let packet = bincode::deserialize(&buffer).expect("Failed to deserialize.");
|
|
||||||
Ok(packet)
|
Ok(packet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
#![feature(offset_of)]
|
#![feature(offset_of)]
|
||||||
#![feature(arbitrary_self_types)]
|
#![feature(arbitrary_self_types)]
|
||||||
#![feature(lazy_cell)]
|
#![feature(lazy_cell)]
|
||||||
|
#![feature(never_type)]
|
||||||
|
|
||||||
mod bgworker;
|
mod bgworker;
|
||||||
mod datatype;
|
mod datatype;
|
||||||
@@ -33,7 +34,7 @@ unsafe extern "C" fn _PG_init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(any(target_os = "linux", target_os = "macos")))]
|
#[cfg(not(any(target_os = "linux", target_os = "macos", target_os = "freebsd")))]
|
||||||
compile_error!("Target is not supported.");
|
compile_error!("Target is not supported.");
|
||||||
|
|
||||||
#[cfg(not(target_endian = "little"))]
|
#[cfg(not(target_endian = "little"))]
|
||||||
|
@@ -1,12 +1,11 @@
|
|||||||
use rustix::fd::{AsFd, OwnedFd};
|
use rustix::fd::{AsFd, OwnedFd};
|
||||||
use rustix::mm::{MapFlags, ProtFlags};
|
use rustix::mm::{MapFlags, ProtFlags};
|
||||||
use std::io::ErrorKind;
|
|
||||||
use std::sync::atomic::AtomicU32;
|
use std::sync::atomic::AtomicU32;
|
||||||
use std::sync::LazyLock;
|
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
static SUPPORT_MEMFD: LazyLock<bool> = LazyLock::new(|| {
|
static SUPPORT_MEMFD: std::sync::LazyLock<bool> = std::sync::LazyLock::new(|| {
|
||||||
use rustix::fs::MemfdFlags;
|
use rustix::fs::MemfdFlags;
|
||||||
|
use std::io::ErrorKind;
|
||||||
match rustix::fs::memfd_create(".memfd.VECTORS.SUPPORT", MemfdFlags::empty()) {
|
match rustix::fs::memfd_create(".memfd.VECTORS.SUPPORT", MemfdFlags::empty()) {
|
||||||
Ok(_) => true,
|
Ok(_) => true,
|
||||||
Err(e) if e.kind() == ErrorKind::Unsupported => false,
|
Err(e) if e.kind() == ErrorKind::Unsupported => false,
|
||||||
@@ -139,3 +138,64 @@ pub unsafe fn mmap_populate(len: usize, fd: impl AsFd) -> std::io::Result<*mut l
|
|||||||
)?)
|
)?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "freebsd")]
|
||||||
|
pub unsafe fn futex_wait(futex: &AtomicU32, value: u32) {
|
||||||
|
let ptr: *const AtomicU32 = futex;
|
||||||
|
unsafe {
|
||||||
|
libc::_umtx_op(
|
||||||
|
ptr as *mut libc::c_void,
|
||||||
|
libc::UMTX_OP_WAIT_UINT,
|
||||||
|
value as libc::c_ulong,
|
||||||
|
core::ptr::null_mut(),
|
||||||
|
core::ptr::null_mut(),
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "freebsd")]
|
||||||
|
pub unsafe fn futex_wake(futex: &AtomicU32) {
|
||||||
|
let ptr: *const AtomicU32 = futex;
|
||||||
|
unsafe {
|
||||||
|
libc::_umtx_op(
|
||||||
|
ptr as *mut libc::c_void,
|
||||||
|
libc::UMTX_OP_WAKE,
|
||||||
|
i32::MAX as libc::c_ulong,
|
||||||
|
core::ptr::null_mut(),
|
||||||
|
core::ptr::null_mut(),
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "freebsd")]
|
||||||
|
pub fn memfd_create() -> std::io::Result<OwnedFd> {
|
||||||
|
use rustix::fs::Mode;
|
||||||
|
use rustix::fs::OFlags;
|
||||||
|
let name = format!(
|
||||||
|
".shm.VECTORS.{:x}.{:x}",
|
||||||
|
std::process::id(),
|
||||||
|
rand::random::<u32>()
|
||||||
|
);
|
||||||
|
let fd = rustix::fs::open(
|
||||||
|
&name,
|
||||||
|
OFlags::RDWR | OFlags::CREATE | OFlags::EXCL,
|
||||||
|
Mode::RUSR | Mode::WUSR,
|
||||||
|
)?;
|
||||||
|
rustix::fs::unlink(&name)?;
|
||||||
|
Ok(fd)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "freebsd")]
|
||||||
|
pub unsafe fn mmap_populate(len: usize, fd: impl AsFd) -> std::io::Result<*mut libc::c_void> {
|
||||||
|
use std::ptr::null_mut;
|
||||||
|
unsafe {
|
||||||
|
Ok(rustix::mm::mmap(
|
||||||
|
null_mut(),
|
||||||
|
len,
|
||||||
|
ProtFlags::READ | ProtFlags::WRITE,
|
||||||
|
MapFlags::SHARED,
|
||||||
|
fd,
|
||||||
|
0,
|
||||||
|
)?)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user