1{
2 buildEnv,
3 fetchFromGitHub,
4 lib,
5 pkg-config,
6 postgresql,
7 postgresqlBuildExtension,
8 postgresqlTestExtension,
9 R,
10 rPackages,
11}:
12
13postgresqlBuildExtension (finalAttrs: {
14 pname = "plr";
15 version = "${builtins.replaceStrings [ "_" ] [ "." ] (
16 lib.strings.removePrefix "REL" finalAttrs.src.rev
17 )}";
18
19 src = fetchFromGitHub {
20 owner = "postgres-plr";
21 repo = "plr";
22 tag = "REL8_4_7";
23 hash = "sha256-PdvFEmtKfLT/xfaf6obomPR5hKC9F+wqpfi1heBphRk=";
24 };
25
26 nativeBuildInputs = [ pkg-config ];
27 buildInputs = [ R ];
28
29 makeFlags = [ "USE_PGXS=1" ];
30
31 passthru = {
32 withPackages =
33 f:
34 let
35 pkgs = f rPackages;
36 paths = lib.concatMapStringsSep ":" (pkg: "${pkg}/library") pkgs;
37 in
38 buildEnv {
39 name = "${finalAttrs.pname}-with-packages-${finalAttrs.version}";
40 paths = [ finalAttrs.finalPackage ];
41 passthru.wrapperArgs = [
42 ''--set R_LIBS_SITE "${paths}"''
43 ];
44 };
45 tests.extension = postgresqlTestExtension {
46 finalPackage = finalAttrs.finalPackage.withPackages (ps: [ ps.base64enc ]);
47 sql = ''
48 CREATE EXTENSION plr;
49 DO LANGUAGE plr $$
50 require('base64enc')
51 base64encode(1:100)
52 $$;
53 '';
54 };
55 };
56
57 meta = {
58 description = "PL/R - R Procedural Language for PostgreSQL";
59 homepage = "https://github.com/postgres-plr/plr";
60 changelog = "https://github.com/postgres-plr/plr/blob/${finalAttrs.src.rev}/changelog.md";
61 maintainers = with lib.maintainers; [ qoelet ];
62 platforms = postgresql.meta.platforms;
63 license = lib.licenses.gpl2Only;
64 };
65})