Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prepare v1.2.7 #398

Merged
merged 3 commits into from
Nov 18, 2023
Merged

Prepare v1.2.7 #398

merged 3 commits into from
Nov 18, 2023

Conversation

eeeebbbbrrrr
Copy link
Contributor

@eeeebbbbrrrr eeeebbbbrrrr commented Nov 18, 2023

Welcome to PL/Rust v1.2.7. This is a small feature release that adds the ability to call user defined functions (UDFs) from a LANGUAGE plrust function.

As a contrived example, perhaps your database has a LANGUAGE sql function like:

CREATE OR REPLACE FUNCTION sum_array(a int[]) RETURNS int STRICT LANGUAGE sql AS $$ 
    SELECT sum(e) FROM unnest(a) e 
$$;

And you wish to call it from a PL/Rust function. Well, now you can!

CREATE OR REPLACE FUNCTION transform_array(a int[]) RETURNS int STRICT LANGUAGE plrust AS $$
    // add one to every element of `a`, the input argument array, collecting into a new Vec
    let a = a.into_iter().map(|e| e.unwrap_or(0) + 1).collect::<Vec<_>>();  

    // call the existing "sum_array(int[])" function to sum the values of `a`
    Ok(fn_call("sum_array", &[&Arg::Value(a)])?)
$$;

SELECT transform_array(ARRAY[1,2,3]);
transform_array 
-----------------
               9
(1 row)

PL/Rust's dynamic function call API is documented in the book.

Other than also upgrading the underlying pgrx dependency to v0.11.0, there have been no other changes to PL/Rust since v1.2.6.

This release took quite a bit longer than expected as we had a desire to upgrade it to work with Rust v1.73.0. Unfortunately, rustc v1.73.0 introduced a bug around custom lints and it took our team weeks to track this down and ultimately provide the Rust project a PR. Based on Rust's release schedule, that fix won't be released until v1.75.0.

A note on Postgres 16 support

Postgres 16 has added some "SIMD" code, and includes the compiler built-in header for SIMD support. This can cause compilation problems with pgrx if the host system has multiple clang versions installed. It's suggested a machine running PL/Rust only have one clang version and the matching llvm packages installed. It doesn't seem to matter which version, only that there's one.

@eeeebbbbrrrr eeeebbbbrrrr changed the title Prepare 1.2.7 Prepare v1.2.7 Nov 18, 2023
@eeeebbbbrrrr eeeebbbbrrrr merged commit f631af3 into develop Nov 18, 2023
14 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant