diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b07bc57f0..220c9efd1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,8 +1,6 @@ name: tests on: push: - branches: - - master workflow_dispatch: jobs: tests: @@ -14,49 +12,77 @@ jobs: - uses: actions/checkout@v3 - name: Install dependencies run: | - sudo apt-get update && \ - DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC sudo apt-get install -y \ - curl \ - build-essential \ - libopenblas-dev \ - clang \ - python3-dev \ - libpython3-dev \ - postgresql \ - postgresql-server-dev-14 \ - pkg-config \ - python3-pip \ - python3 - sudo pip3 install xgboost lightgbm scikit-learn + git submodule update --init --recursive + + # PostgreSQL apt + curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null + sudo sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' + + sudo apt-get install -y software-properties-common + sudo add-apt-repository ppa:apt-fast/stable --yes + sudo add-apt-repository ppa:deadsnakes/ppa --yes + sudo apt update + + sudo apt-get install -y apt-fast + sudo apt-get update && sudo apt-fast install -y \ + libopenblas-dev \ + libssl-dev \ + bison \ + flex \ + pkg-config \ + cmake \ + libreadline-dev \ + libz-dev \ + curl \ + lsb-release \ + tzdata \ + sudo \ + cmake \ + libpq-dev \ + libclang-dev \ + wget \ + postgresql-15 \ + postgresql-14 \ + postgresql-13 \ + postgresql-12 \ + postgresql-11 \ + postgresql-server-dev-15 \ + postgresql-server-dev-14 \ + postgresql-server-dev-13 \ + postgresql-server-dev-12 \ + postgresql-server-dev-11 \ + lsb-release \ + python3.10 \ + python3-pip \ + libpython3.10-dev \ + python3.10-dev \ + + sudo pip3 install xgboost lightgbm scikit-learn - name: Cache dependencies uses: actions/cache@v3 with: path: | - ~/.cargo pgml-extension/target - ~/.pgx + ~/.cargo key: ${{ runner.os }}-rust-${{ hashFiles('pgml-extension/Cargo.lock') }} - name: Submodules run: | git submodule update --init --recursive - - name: Run tests - run: | - curl https://sh.rustup.rs -sSf | sh -s -- -y - source ~/.cargo/env - cargo install cargo-pgx --version "0.7.1" - - if [[ ! -d ~/.pgx ]]; then - cargo pgx init - fi - - cargo pgx test - - cargo pgx stop - cargo pgx start - - # psql -p 28813 -h 127.0.0.1 -d pgml -P pager -f tests/test.sql - - cargo pgx stop - - - + - name: Install pgrx + uses: postgresml/gh-actions-cargo@master + with: + working-directory: pgml-extension + command: install + args: cargo-pgrx --version "0.7.4" + - name: pgrx init + uses: postgresml/gh-actions-cargo@master + with: + working-directory: pgml-extension + command: pgrx + args: init --pg11=/usr/lib/postgresql/11/bin/pg_config --pg12=/usr/lib/postgresql/12/bin/pg_config --pg13=/usr/lib/postgresql/13/bin/pg_config --pg14=/usr/lib/postgresql/14/bin/pg_config --pg15=/usr/lib/postgresql/15/bin/pg_config + - name: pgrx test + uses: postgresml/gh-actions-cargo@master + with: + working-directory: pgml-extension + command: pgrx + args: test diff --git a/.github/workflows/package-extension.yml b/.github/workflows/package-extension.yml index d9e31243d..9d27a3718 100644 --- a/.github/workflows/package-extension.yml +++ b/.github/workflows/package-extension.yml @@ -84,7 +84,7 @@ jobs: with: working-directory: pgml-extension command: install - args: cargo-pgx --version "0.7.1" + args: cargo-pgx --version "0.7.4" - name: pgx init uses: postgresml/gh-actions-cargo@master with: diff --git a/pgml-extension/Cargo.lock b/pgml-extension/Cargo.lock index a731ecb6c..eb5962c3b 100644 --- a/pgml-extension/Cargo.lock +++ b/pgml-extension/Cargo.lock @@ -1701,9 +1701,9 @@ dependencies = [ "once_cell", "openblas-src", "parking_lot", - "pgx", - "pgx-pg-sys", - "pgx-tests", + "pgrx", + "pgrx-pg-sys", + "pgrx-tests", "pyo3", "rand", "rmp-serde", @@ -1715,10 +1715,10 @@ dependencies = [ ] [[package]] -name = "pgx" +name = "pgrx" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2947326bd9a80ec122207f0a59367592f79c053390d6ee961fe17a71ef1e3d" +checksum = "520e5f1b0c97fa07446eddf2e9c8a410ced351014a2339ef680bfc177d989b55" dependencies = [ "atomic-traits", "bitflags", @@ -1726,9 +1726,9 @@ dependencies = [ "heapless", "libc", "once_cell", - "pgx-macros", - "pgx-pg-sys", - "pgx-sql-entity-graph", + "pgrx-macros", + "pgrx-pg-sys", + "pgrx-sql-entity-graph", "seahash", "seq-macro", "serde", @@ -1742,22 +1742,22 @@ dependencies = [ ] [[package]] -name = "pgx-macros" +name = "pgrx-macros" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96bf5c70a467b39c1a67a2e1ec7acc4ba8bb32e5bf2d3dead2d89b8442f31ff9" +checksum = "b28d2441f5e36140541868ef5fb92b964e9c10e242fe2cfdcb464f05afd7fd16" dependencies = [ - "pgx-sql-entity-graph", + "pgrx-sql-entity-graph", "proc-macro2", "quote 1.0.26", "syn 1.0.109", ] [[package]] -name = "pgx-pg-config" +name = "pgrx-pg-config" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020f2f1e0805a60321a375d0f27d771678d59b808bbb5f632c42607a661ab63a" +checksum = "bea222a7b5241102003693f48ee187878e92a5d4f6c5f344e00786899253978d" dependencies = [ "dirs 4.0.0", "eyre", @@ -1771,19 +1771,19 @@ dependencies = [ ] [[package]] -name = "pgx-pg-sys" +name = "pgrx-pg-sys" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2371dc1ee5c6f32b9a862fe1706e7ddf862003f167d21d9886b4b4f3f2391e" +checksum = "9ad42206dbd7780516c159da71a46b6785ee958595adebc87cbfb21ceb18e9cf" dependencies = [ "bindgen 0.60.1", "eyre", "libc", "memoffset 0.8.0", "once_cell", - "pgx-macros", - "pgx-pg-config", - "pgx-sql-entity-graph", + "pgrx-macros", + "pgrx-pg-config", + "pgrx-sql-entity-graph", "proc-macro2", "quote 1.0.26", "serde", @@ -1793,10 +1793,10 @@ dependencies = [ ] [[package]] -name = "pgx-sql-entity-graph" +name = "pgrx-sql-entity-graph" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5b7304665fe3a052dd353a08d013c4d5d780a49be8b60d27c430492b1d442e" +checksum = "87dd0800eb8ab52d161d57db297aaa00b2debdba77f738ff011664c8751e92c9" dependencies = [ "convert_case", "eyre", @@ -1808,19 +1808,19 @@ dependencies = [ ] [[package]] -name = "pgx-tests" +name = "pgrx-tests" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2dfa440a295e0a6bc1a7c87af83dc5e9f7a85c05d28b9fa77f1793f6883f917" +checksum = "e4ab1f3b9bbcdbea070d439e49ad146ea8a5a25104128a8b7f8522d21445a940" dependencies = [ "clap-cargo", "eyre", "libc", "once_cell", "owo-colors", - "pgx", - "pgx-macros", - "pgx-pg-config", + "pgrx", + "pgrx-macros", + "pgrx-pg-config", "postgres", "regex", "serde", diff --git a/pgml-extension/Cargo.toml b/pgml-extension/Cargo.toml index 2e68aa17c..e688ea2c4 100644 --- a/pgml-extension/Cargo.toml +++ b/pgml-extension/Cargo.toml @@ -8,18 +8,18 @@ crate-type = ["cdylib"] [features] default = ["pg15", "python"] -pg11 = ["pgx/pg11", "pgx-tests/pg11" ] -pg12 = ["pgx/pg12", "pgx-tests/pg12" ] -pg13 = ["pgx/pg13", "pgx-tests/pg13" ] -pg14 = ["pgx/pg14", "pgx-tests/pg14" ] -pg15 = ["pgx/pg15", "pgx-tests/pg15" ] +pg11 = ["pgrx/pg11", "pgrx-tests/pg11" ] +pg12 = ["pgrx/pg12", "pgrx-tests/pg12" ] +pg13 = ["pgrx/pg13", "pgrx-tests/pg13" ] +pg14 = ["pgrx/pg14", "pgrx-tests/pg14" ] +pg15 = ["pgrx/pg15", "pgrx-tests/pg15" ] pg_test = [] python = ["pyo3"] cuda = ["xgboost/cuda", "lightgbm/cuda"] [dependencies] -pgx = "=0.7.4" -pgx-pg-sys = "=0.7.4" +pgrx = "=0.7.4" +pgrx-pg-sys = "=0.7.4" xgboost = { git="https://github.com/postgresml/rust-xgboost.git", branch = "master" } once_cell = "1" rand = "0.8" @@ -48,7 +48,7 @@ flate2 = "1.0" csv = "1.1" [dev-dependencies] -pgx-tests = "=0.7.4" +pgrx-tests = "=0.7.4" [profile.dev] panic = "unwind" diff --git a/pgml-extension/Dockerfile b/pgml-extension/Dockerfile index 25f336260..1c61f9e99 100644 --- a/pgml-extension/Dockerfile +++ b/pgml-extension/Dockerfile @@ -37,8 +37,8 @@ RUN useradd postgresml -m -s /bin/bash -G sudo RUN echo 'postgresml ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers USER postgresml RUN curl https://sh.rustup.rs -sSf | sh -s -- -y -RUN $HOME/.cargo/bin/cargo install cargo-pgx --version "0.7.4" -RUN $HOME/.cargo/bin/cargo pgx init +RUN $HOME/.cargo/bin/cargo install cargo-pgrx --version "0.7.4" +RUN $HOME/.cargo/bin/cargo pgrx init RUN curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null RUN sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' RUN sudo apt update diff --git a/pgml-extension/control b/pgml-extension/control index 640540353..7ce5f6059 100644 --- a/pgml-extension/control +++ b/pgml-extension/control @@ -11,5 +11,5 @@ Description: PostgresML - machine learning with PostgreSQL learning directly in the database. It allows to both train algorithms on tables or views, and to predict novel datapoints using only SQL. - The extension is written in Rust using tcdi/pgx with some additional + The extension is written in Rust using tcdi/pgrx with some additional functionality written in Python & PLPython. diff --git a/pgml-extension/docker/Cargo.toml.cuda b/pgml-extension/docker/Cargo.toml.cuda index 97102f767..4f460c4e3 100644 --- a/pgml-extension/docker/Cargo.toml.cuda +++ b/pgml-extension/docker/Cargo.toml.cuda @@ -8,19 +8,19 @@ crate-type = ["cdylib"] [features] default = ["pg15", "python", "cuda"] -pg10 = ["pgx/pg10", "pgx-tests/pg10" ] -pg11 = ["pgx/pg11", "pgx-tests/pg11" ] -pg12 = ["pgx/pg12", "pgx-tests/pg12" ] -pg13 = ["pgx/pg13", "pgx-tests/pg13" ] -pg14 = ["pgx/pg14", "pgx-tests/pg14" ] -pg15 = ["pgx/pg15", "pgx-tests/pg15" ] +pg10 = ["pgrx/pg10", "pgrx-tests/pg10" ] +pg11 = ["pgrx/pg11", "pgrx-tests/pg11" ] +pg12 = ["pgrx/pg12", "pgrx-tests/pg12" ] +pg13 = ["pgrx/pg13", "pgrx-tests/pg13" ] +pg14 = ["pgrx/pg14", "pgrx-tests/pg14" ] +pg15 = ["pgrx/pg15", "pgrx-tests/pg15" ] pg_test = [] python = ["pyo3"] cuda = ["xgboost/cuda", "lightgbm/cuda"] [dependencies] -pgx = "=0.7.1" -pgx-pg-sys = "=0.7.1" +pgrx = "=0.7.1" +pgrx-pg-sys = "=0.7.1" xgboost = { git="https://github.com/postgresml/rust-xgboost.git", branch = "master" } once_cell = "1" rand = "0.8" @@ -49,7 +49,7 @@ flate2 = "1.0" csv = "1.1" [dev-dependencies] -pgx-tests = "=0.7.1" +pgrx-tests = "=0.7.1" [profile.dev] panic = "unwind" diff --git a/pgml-extension/docker/Cargo.toml.no-python b/pgml-extension/docker/Cargo.toml.no-python index e4dbf82cd..d2224c4df 100644 --- a/pgml-extension/docker/Cargo.toml.no-python +++ b/pgml-extension/docker/Cargo.toml.no-python @@ -8,19 +8,19 @@ crate-type = ["cdylib"] [features] default = ["pg15"] -pg10 = ["pgx/pg10", "pgx-tests/pg10" ] -pg11 = ["pgx/pg11", "pgx-tests/pg11" ] -pg12 = ["pgx/pg12", "pgx-tests/pg12" ] -pg13 = ["pgx/pg13", "pgx-tests/pg13" ] -pg14 = ["pgx/pg14", "pgx-tests/pg14" ] -pg14 = ["pgx/pg15", "pgx-tests/pg15" ] +pg10 = ["pgrx/pg10", "pgrx-tests/pg10" ] +pg11 = ["pgrx/pg11", "pgrx-tests/pg11" ] +pg12 = ["pgrx/pg12", "pgrx-tests/pg12" ] +pg13 = ["pgrx/pg13", "pgrx-tests/pg13" ] +pg14 = ["pgrx/pg14", "pgrx-tests/pg14" ] +pg14 = ["pgrx/pg15", "pgrx-tests/pg15" ] pg_test = [] python = ["pyo3"] cuda = ["xgboost/cuda", "lightgbm/cuda"] [dependencies] -pgx = "=0.7.1" -pgx-pg-sys = "=0.7.1" +pgrx = "=0.7.1" +pgrx-pg-sys = "=0.7.1" xgboost = { git="https://github.com/postgresml/rust-xgboost.git", branch = "master" } once_cell = "1" rand = "0.8" @@ -49,7 +49,7 @@ flate2 = "1.0" csv = "1.1" [dev-dependencies] -pgx-tests = "=0.7.1" +pgrx-tests = "=0.7.1" [profile.dev] panic = "unwind" diff --git a/pgml-extension/sql/setup_examples.sql b/pgml-extension/sql/setup_examples.sql index af696af89..872588f1a 100644 --- a/pgml-extension/sql/setup_examples.sql +++ b/pgml-extension/sql/setup_examples.sql @@ -3,7 +3,7 @@ --- --- Usage: --- ---- $ cargo pgx run --release +--- $ cargo pgrx run --release --- $ psql -P pager-off -h localhost -p 28813 -d pgml -f sql/setup_examples.sql --- \set ON_ERROR_STOP true diff --git a/pgml-extension/src/api.rs b/pgml-extension/src/api.rs index 7f09fb8c8..029f5a169 100644 --- a/pgml-extension/src/api.rs +++ b/pgml-extension/src/api.rs @@ -3,8 +3,8 @@ use std::fmt::Write; use std::str::FromStr; use ndarray::Zip; -use pgx::iter::{SetOfIterator, TableIterator}; -use pgx::*; +use pgrx::iter::{SetOfIterator, TableIterator}; +use pgrx::*; #[cfg(feature = "python")] use pyo3::prelude::*; @@ -464,7 +464,7 @@ fn predict_batch(project_name: &str, features: Vec) -> SetOfIterator<'stati } #[pg_extern(strict, name = "predict")] -fn predict_row(project_name: &str, row: pgx::datum::AnyElement) -> f32 { +fn predict_row(project_name: &str, row: pgrx::datum::AnyElement) -> f32 { predict_model_row(Project::get_deployed_model_id(project_name), row) } @@ -489,7 +489,7 @@ fn predict_model_batch(model_id: i64, features: Vec) -> Vec { } #[pg_extern(strict, name = "predict")] -fn predict_model_row(model_id: i64, row: pgx::datum::AnyElement) -> f32 { +fn predict_model_row(model_id: i64, row: pgrx::datum::AnyElement) -> f32 { let model = Model::find_cached(model_id); let snapshot = &model.snapshot; let numeric_encoded_features = model.numeric_encode_features(&[row]); @@ -534,7 +534,7 @@ fn load_dataset( limit: default!(Option, "NULL"), kwargs: default!(JsonB, "'{}'"), ) -> TableIterator<'static, (name!(table_name, String), name!(rows, i64))> { - // cast limit since pgx doesn't support usize + // cast limit since pgrx doesn't support usize let limit: Option = limit.map(|limit| limit.try_into().unwrap()); let (name, rows) = match source { "breast_cancer" => dataset::load_breast_cancer(limit), @@ -564,10 +564,10 @@ pub fn transform_json( task: JsonB, args: default!(JsonB, "'{}'"), inputs: default!(Vec, "ARRAY[]::TEXT[]"), - cache: default!(bool, false) + cache: default!(bool, false), ) -> JsonB { JsonB(crate::bindings::transformers::transform( - &task.0, &args.0, &inputs, cache + &task.0, &args.0, &inputs, cache, )) } @@ -577,13 +577,13 @@ pub fn transform_string( task: String, args: default!(JsonB, "'{}'"), inputs: default!(Vec, "ARRAY[]::TEXT[]"), - cache: default!(bool, false) + cache: default!(bool, false), ) -> JsonB { let mut task_map = HashMap::new(); task_map.insert("task", task); let task_json = json!(task_map); JsonB(crate::bindings::transformers::transform( - &task_json, &args.0, &inputs, cache + &task_json, &args.0, &inputs, cache, )) } diff --git a/pgml-extension/src/bindings/lightgbm.rs b/pgml-extension/src/bindings/lightgbm.rs index e5795080e..65825f4ae 100644 --- a/pgml-extension/src/bindings/lightgbm.rs +++ b/pgml-extension/src/bindings/lightgbm.rs @@ -3,7 +3,7 @@ use crate::orm::dataset::Dataset; use crate::orm::task::Task; use crate::orm::Hyperparams; use lightgbm; -use pgx::*; +use pgrx::*; use serde_json::json; pub struct Estimator { diff --git a/pgml-extension/src/bindings/linfa.rs b/pgml-extension/src/bindings/linfa.rs index 420337208..8c358e7f6 100644 --- a/pgml-extension/src/bindings/linfa.rs +++ b/pgml-extension/src/bindings/linfa.rs @@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize}; use super::Bindings; use crate::orm::*; -use pgx::*; +use pgrx::*; #[derive(Debug, Serialize, Deserialize)] pub struct LinearRegression { diff --git a/pgml-extension/src/bindings/mod.rs b/pgml-extension/src/bindings/mod.rs index a1d35526a..6f62ebd34 100644 --- a/pgml-extension/src/bindings/mod.rs +++ b/pgml-extension/src/bindings/mod.rs @@ -1,7 +1,7 @@ use std::fmt::Debug; #[allow(unused_imports)] // used for test macros -use pgx::*; +use pgrx::*; use crate::orm::*; diff --git a/pgml-extension/src/bindings/transformers.rs b/pgml-extension/src/bindings/transformers.rs index 504202ba8..2024e3905 100644 --- a/pgml-extension/src/bindings/transformers.rs +++ b/pgml-extension/src/bindings/transformers.rs @@ -4,7 +4,7 @@ use std::path::PathBuf; use std::str::FromStr; use once_cell::sync::Lazy; -use pgx::*; +use pgrx::*; use pyo3::prelude::*; use pyo3::types::PyTuple; @@ -25,7 +25,7 @@ pub fn transform( task: &serde_json::Value, args: &serde_json::Value, inputs: &Vec, - cache: bool + cache: bool, ) -> serde_json::Value { let task = serde_json::to_string(task).unwrap(); let args = serde_json::to_string(args).unwrap(); @@ -39,7 +39,12 @@ pub fn transform( py, PyTuple::new( py, - &[task.into_py(py), args.into_py(py), inputs.into_py(py), cache.into_py(py)], + &[ + task.into_py(py), + args.into_py(py), + inputs.into_py(py), + cache.into_py(py), + ], ), ) .unwrap() diff --git a/pgml-extension/src/bindings/xgboost.rs b/pgml-extension/src/bindings/xgboost.rs index b7bebd91d..2eafc6839 100644 --- a/pgml-extension/src/bindings/xgboost.rs +++ b/pgml-extension/src/bindings/xgboost.rs @@ -13,7 +13,7 @@ use crate::orm::Hyperparams; use crate::bindings::Bindings; -use pgx::*; +use pgrx::*; #[pg_extern] fn xgboost_version() -> String { diff --git a/pgml-extension/src/lib.rs b/pgml-extension/src/lib.rs index a692ce368..e47825ad2 100644 --- a/pgml-extension/src/lib.rs +++ b/pgml-extension/src/lib.rs @@ -4,7 +4,7 @@ extern crate openblas_src; extern crate serde; extern crate signal_hook; -use pgx::*; +use pgrx::*; pub const VERSION: &str = env!("CARGO_PKG_VERSION"); diff --git a/pgml-extension/src/orm/algorithm.rs b/pgml-extension/src/orm/algorithm.rs index 277e90147..098e04adb 100644 --- a/pgml-extension/src/orm/algorithm.rs +++ b/pgml-extension/src/orm/algorithm.rs @@ -1,4 +1,4 @@ -use pgx::*; +use pgrx::*; use serde::Deserialize; #[derive(PostgresEnum, Copy, Clone, Eq, PartialEq, Debug, Deserialize)] diff --git a/pgml-extension/src/orm/dataset.rs b/pgml-extension/src/orm/dataset.rs index 8092522ab..92d20369c 100644 --- a/pgml-extension/src/orm/dataset.rs +++ b/pgml-extension/src/orm/dataset.rs @@ -1,7 +1,7 @@ use std::fmt::{Display, Formatter}; use flate2::read::GzDecoder; -use pgx::*; +use pgrx::*; use serde::Deserialize; #[derive(Debug)] diff --git a/pgml-extension/src/orm/file.rs b/pgml-extension/src/orm/file.rs index 89fa059c5..121243661 100644 --- a/pgml-extension/src/orm/file.rs +++ b/pgml-extension/src/orm/file.rs @@ -4,7 +4,7 @@ use std::str::FromStr; use std::sync::Arc; use once_cell::sync::Lazy; -use pgx::*; +use pgrx::*; use crate::bindings::Bindings; diff --git a/pgml-extension/src/orm/model.rs b/pgml-extension/src/orm/model.rs index bc9fbd7c3..9866f5c33 100644 --- a/pgml-extension/src/orm/model.rs +++ b/pgml-extension/src/orm/model.rs @@ -10,8 +10,8 @@ use indexmap::IndexMap; use itertools::{izip, Itertools}; use ndarray::ArrayView1; use once_cell::sync::Lazy; -use pgx::heap_tuple::PgHeapTuple; -use pgx::*; +use pgrx::heap_tuple::PgHeapTuple; +use pgrx::*; use rand::prelude::SliceRandom; use serde_json::json; @@ -928,13 +928,13 @@ impl Model { ).unwrap(); } - pub fn numeric_encode_features(&self, rows: &[pgx::datum::AnyElement]) -> Vec { - // TODO handle FLOAT4[] as if it were pgx::datum::AnyElement, skipping all this, and going straight to predict + pub fn numeric_encode_features(&self, rows: &[pgrx::datum::AnyElement]) -> Vec { + // TODO handle FLOAT4[] as if it were pgrx::datum::AnyElement, skipping all this, and going straight to predict let mut features = Vec::new(); // TODO pre-allocate space let columns = &self.snapshot.columns; for row in rows { match row.oid() { - pgx_pg_sys::RECORDOID => { + pgrx_pg_sys::RECORDOID => { let tuple = unsafe { PgHeapTuple::from_composite_datum(row.datum()) }; for index in 1..tuple.len() + 1 { let column = &columns[index - 1]; @@ -944,19 +944,19 @@ impl Model { match &column.statistics.categories { Some(_categories) => { let key = match attribute.atttypid { - pgx_pg_sys::UNKNOWNOID => { + pgrx_pg_sys::UNKNOWNOID => { error!("Type information missing for column: {:?}. If this is intended to be a TEXT or other categorical column, you will need to explicitly cast it, e.g. change `{:?}` to `CAST({:?} AS TEXT)`.", column.name, column.name, column.name); } - pgx_pg_sys::TEXTOID - | pgx_pg_sys::VARCHAROID - | pgx_pg_sys::BPCHAROID => { + pgrx_pg_sys::TEXTOID + | pgrx_pg_sys::VARCHAROID + | pgrx_pg_sys::BPCHAROID => { let element: Result, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); element .unwrap() .unwrap_or(snapshot::NULL_CATEGORY_KEY.to_string()) } - pgx_pg_sys::BOOLOID => { + pgrx_pg_sys::BOOLOID => { let element: Result, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); element @@ -965,7 +965,7 @@ impl Model { k.to_string() }) } - pgx_pg_sys::INT2OID => { + pgrx_pg_sys::INT2OID => { let element: Result, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); element @@ -974,7 +974,7 @@ impl Model { k.to_string() }) } - pgx_pg_sys::INT4OID => { + pgrx_pg_sys::INT4OID => { let element: Result, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); element @@ -983,7 +983,7 @@ impl Model { k.to_string() }) } - pgx_pg_sys::INT8OID => { + pgrx_pg_sys::INT8OID => { let element: Result, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); element @@ -992,7 +992,7 @@ impl Model { k.to_string() }) } - pgx_pg_sys::FLOAT4OID => { + pgrx_pg_sys::FLOAT4OID => { let element: Result, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); element @@ -1001,7 +1001,7 @@ impl Model { k.to_string() }) } - pgx_pg_sys::FLOAT8OID => { + pgrx_pg_sys::FLOAT8OID => { let element: Result, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); element @@ -1020,82 +1020,82 @@ impl Model { } None => { match attribute.atttypid { - pgx_pg_sys::UNKNOWNOID => { + pgrx_pg_sys::UNKNOWNOID => { error!("Type information missing for column: {:?}. If this is intended to be a FLOAT4 or other numeric column, you will need to explicitly cast it, e.g. change `{:?}` to `CAST({:?} AS FLOAT4)`.", column.name, column.name, column.name); } - pgx_pg_sys::BOOLOID => { + pgrx_pg_sys::BOOLOID => { let element: Result, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); features.push( element.unwrap().map_or(f32::NAN, |v| v as u8 as f32), ); } - pgx_pg_sys::INT2OID => { + pgrx_pg_sys::INT2OID => { let element: Result, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); features .push(element.unwrap().map_or(f32::NAN, |v| v as f32)); } - pgx_pg_sys::INT4OID => { + pgrx_pg_sys::INT4OID => { let element: Result, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); features .push(element.unwrap().map_or(f32::NAN, |v| v as f32)); } - pgx_pg_sys::INT8OID => { + pgrx_pg_sys::INT8OID => { let element: Result, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); features .push(element.unwrap().map_or(f32::NAN, |v| v as f32)); } - pgx_pg_sys::FLOAT4OID => { + pgrx_pg_sys::FLOAT4OID => { let element: Result, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); features.push(element.unwrap().map_or(f32::NAN, |v| v)); } - pgx_pg_sys::FLOAT8OID => { + pgrx_pg_sys::FLOAT8OID => { let element: Result, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); features .push(element.unwrap().map_or(f32::NAN, |v| v as f32)); } // TODO handle NULL to NaN for arrays - pgx_pg_sys::BOOLARRAYOID => { + pgrx_pg_sys::BOOLARRAYOID => { let element: Result>, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); for j in element.as_ref().unwrap().as_ref().unwrap() { features.push(*j as i8 as f32); } } - pgx_pg_sys::INT2ARRAYOID => { + pgrx_pg_sys::INT2ARRAYOID => { let element: Result>, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); for j in element.as_ref().unwrap().as_ref().unwrap() { features.push(*j as f32); } } - pgx_pg_sys::INT4ARRAYOID => { + pgrx_pg_sys::INT4ARRAYOID => { let element: Result>, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); for j in element.as_ref().unwrap().as_ref().unwrap() { features.push(*j as f32); } } - pgx_pg_sys::INT8ARRAYOID => { + pgrx_pg_sys::INT8ARRAYOID => { let element: Result>, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); for j in element.as_ref().unwrap().as_ref().unwrap() { features.push(*j as f32); } } - pgx_pg_sys::FLOAT4ARRAYOID => { + pgrx_pg_sys::FLOAT4ARRAYOID => { let element: Result>, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); for j in element.as_ref().unwrap().as_ref().unwrap() { features.push(*j as f32); } } - pgx_pg_sys::FLOAT8ARRAYOID => { + pgrx_pg_sys::FLOAT8ARRAYOID => { let element: Result>, TryFromDatumError> = tuple.get_by_index(index.try_into().unwrap()); for j in element.as_ref().unwrap().as_ref().unwrap() { diff --git a/pgml-extension/src/orm/project.rs b/pgml-extension/src/orm/project.rs index caf12e022..595fb09ea 100644 --- a/pgml-extension/src/orm/project.rs +++ b/pgml-extension/src/orm/project.rs @@ -4,7 +4,7 @@ use std::fmt::{Display, Error, Formatter}; use std::str::FromStr; use once_cell::sync::Lazy; -use pgx::*; +use pgrx::*; use crate::orm::*; diff --git a/pgml-extension/src/orm/runtime.rs b/pgml-extension/src/orm/runtime.rs index abc02ed35..a28656b7d 100644 --- a/pgml-extension/src/orm/runtime.rs +++ b/pgml-extension/src/orm/runtime.rs @@ -1,4 +1,4 @@ -use pgx::*; +use pgrx::*; use serde::Deserialize; #[derive(PostgresEnum, Copy, Clone, Eq, PartialEq, Debug, Deserialize)] diff --git a/pgml-extension/src/orm/sampling.rs b/pgml-extension/src/orm/sampling.rs index f8781f97b..6bb3d7b5a 100644 --- a/pgml-extension/src/orm/sampling.rs +++ b/pgml-extension/src/orm/sampling.rs @@ -1,4 +1,4 @@ -use pgx::*; +use pgrx::*; use serde::Deserialize; #[derive(PostgresEnum, Copy, Clone, Eq, PartialEq, Debug, Deserialize)] diff --git a/pgml-extension/src/orm/search.rs b/pgml-extension/src/orm/search.rs index 58961af8b..4169e3e27 100644 --- a/pgml-extension/src/orm/search.rs +++ b/pgml-extension/src/orm/search.rs @@ -1,4 +1,4 @@ -use pgx::*; +use pgrx::*; use serde::Deserialize; #[derive(PostgresEnum, Copy, Clone, Eq, PartialEq, Debug, Deserialize)] diff --git a/pgml-extension/src/orm/snapshot.rs b/pgml-extension/src/orm/snapshot.rs index 121c82066..27f623347 100644 --- a/pgml-extension/src/orm/snapshot.rs +++ b/pgml-extension/src/orm/snapshot.rs @@ -5,7 +5,7 @@ use std::str::FromStr; use indexmap::IndexMap; use ndarray::Zip; -use pgx::*; +use pgrx::*; use serde::{Deserialize, Serialize}; use serde_json::json; diff --git a/pgml-extension/src/orm/status.rs b/pgml-extension/src/orm/status.rs index 4f99468e5..10d05e1f1 100644 --- a/pgml-extension/src/orm/status.rs +++ b/pgml-extension/src/orm/status.rs @@ -1,4 +1,4 @@ -use pgx::*; +use pgrx::*; use serde::Deserialize; #[derive(PostgresEnum, Copy, Clone, Eq, PartialEq, Debug, Deserialize)] diff --git a/pgml-extension/src/orm/strategy.rs b/pgml-extension/src/orm/strategy.rs index 597f45f4e..2e8e54edf 100644 --- a/pgml-extension/src/orm/strategy.rs +++ b/pgml-extension/src/orm/strategy.rs @@ -1,4 +1,4 @@ -use pgx::*; +use pgrx::*; use serde::Deserialize; #[derive(PostgresEnum, Copy, Clone, Eq, PartialEq, Debug, Deserialize)] diff --git a/pgml-extension/src/orm/task.rs b/pgml-extension/src/orm/task.rs index f9285a2cd..bd9d69d56 100644 --- a/pgml-extension/src/orm/task.rs +++ b/pgml-extension/src/orm/task.rs @@ -1,4 +1,4 @@ -use pgx::*; +use pgrx::*; use serde::Deserialize; #[derive(PostgresEnum, Copy, Clone, Eq, PartialEq, Debug, Deserialize)] @@ -14,7 +14,7 @@ pub enum Task { text2text, } -// unfortunately the pgx macro expands the enum names to underscore, but huggingface uses dash +// unfortunately the pgrx macro expands the enum names to underscore, but huggingface uses dash impl Task { pub fn to_pg_enum(&self) -> String { match *self { diff --git a/pgml-extension/src/vectors.rs b/pgml-extension/src/vectors.rs index 411f0b7eb..fd48e904c 100644 --- a/pgml-extension/src/vectors.rs +++ b/pgml-extension/src/vectors.rs @@ -1,4 +1,4 @@ -use pgx::*; +use pgrx::*; #[pg_extern(immutable, parallel_safe, strict, name = "add")] fn add_scalar_s(vector: Vec, addend: f32) -> Vec { diff --git a/pgml-extension/tests/test.sql b/pgml-extension/tests/test.sql index ed14c510d..ece0cd165 100644 --- a/pgml-extension/tests/test.sql +++ b/pgml-extension/tests/test.sql @@ -3,7 +3,7 @@ --- --- Usage: --- ---- $ cargo pgx run --release +--- $ cargo pgrx run --release --- $ psql -h localhost -p 28815 -d pgml -f tests/test.sql -P pager --- \set ON_ERROR_STOP true pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy