supabase-postgres.git / summary / log / commit / refs

commit    429d89a8bba2f26f073655a867c6ae0240750d92
Author:   samrose <samuel.rose@gmail.com>
Commit:   GitHub <noreply@github.com>
Date:     Tue May 21 14:58:30 2024 +0000

    Sam/pljava nix (#976)
    
    * feat: package pljava
    
    * feat: pljava psql nix package
    
    * feat: package and smoke test pljava extension into the bundle
    run on openjdk11
    
    * chore: cleanup nix expression


.gitignore | 5 +++++ flake.nix | 9 ++++++-- nix/ext/pljava.nix | 51 ++++++++++++++++++++++++++++++++++++++++++++ nix/tests/postgresql.conf.in | 1 + nix/tests/prime.sql | 1 + nix/tools/run-server.sh.in | 8 ++++--- 6 files changed, 70 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 4ee250e0..a6950d2f 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,8 @@ __pycache__/ result* .env-local .history + + +#IDE +.idea/ +.vscode/ diff --git a/flake.nix b/flake.nix index db235252..e83ffab1 100644 --- a/flake.nix +++ b/flake.nix @@ -128,6 +128,7 @@ ./nix/ext/wrappers/default.nix ./nix/ext/supautils.nix ./nix/ext/plv8.nix + ./nix/ext/pljava.nix ]; #Where we import and build the orioledb extension, we add on our custom extensions @@ -412,7 +413,8 @@ --subst-var-by 'PGSQL_SUPERUSER' '${pgsqlSuperuser}' \ --subst-var-by 'PSQL15_BINDIR' '${basePackages.psql_15.bin}' \ --subst-var-by 'PSQL_CONF_FILE' '${configFile}' \ - --subst-var-by 'PGSODIUM_GETKEY' '${getkeyScript}' + --subst-var-by 'PGSODIUM_GETKEY' '${getkeyScript}' \ + --subst-var-by 'LIBJVM_LOCATION' '${pkgs.openjdk11}/lib/openjdk/lib/server/libjvm.so' chmod +x $out/bin/start-postgres-server ''; @@ -475,13 +477,16 @@ pkgs.runCommand "postgres-${pgpkg.version}-check-harness" { nativeBuildInputs = with pkgs; [ coreutils bash pgpkg pg_prove procps ]; + propagatedBuildInputs = with pkgs; [ openjdk11 ]; } '' export PGDATA=/tmp/pgdata mkdir -p $PGDATA initdb --locale=C substitute ${./nix/tests/postgresql.conf.in} $PGDATA/postgresql.conf \ - --subst-var-by PGSODIUM_GETKEY_SCRIPT "${./nix/tests/util/pgsodium_getkey.sh}" + --subst-var-by PGSODIUM_GETKEY_SCRIPT "${./nix/tests/util/pgsodium_getkey.sh}" \ + --subst-var-by PLJAVA_LIBJVM_LOCATION "${pkgs.openjdk11}/lib/openjdk/lib/server/libjvm.so" + postgres -k /tmp >logfile 2>&1 & sleep 2 diff --git a/nix/ext/pljava.nix b/nix/ext/pljava.nix new file mode 100644 index 00000000..16f8a59c --- /dev/null +++ b/nix/ext/pljava.nix @@ -0,0 +1,51 @@ +{ stdenv, lib, fetchFromGitHub, openssl, openjdk, maven, postgresql, libkrb5, makeWrapper, gcc, pkg-config, which }: + +maven.buildMavenPackage rec { + pname = "pljava"; + + version = "1.6.7"; + + src = fetchFromGitHub { + owner = "tada"; + repo = "pljava"; + rev = "V1_6_7"; + sha256 = "sha256-M17adSLsw47KZ2BoUwxyWkXKRD8TcexDAy61Yfw4fNU="; + + }; + + mvnParameters = "clean install -Dmaven.test.skip -DskipTests -Dmaven.javadoc.skip=true"; + mvnHash = "sha256-lcxRduh/nKcPL6YQIVTsNH0L4ga0LgJpQKgX5IPkRzs="; + + nativeBuildInputs = [ makeWrapper maven openjdk postgresql openssl postgresql gcc libkrb5 pkg-config ]; + buildInputs = [ stdenv.cc.cc.lib which]; + buildPhase = '' + export PATH=$(lib.makeBinPath [ postgresql ]):$PATH + + ''; + buildOffline = true; + + installPhase = '' + mkdir -p $out/pljavabuild + cp -r * $out/pljavabuild + mkdir -p $out/share/postgresql/extension/pljava + mkdir -p $out/share/postgresql/pljava + mkdir -p $out/lib + mkdir -p $out/etc + java -Dpgconfig=${postgresql}/bin/pg_config \ + -Dpgconfig.sharedir=$out/share \ + -Dpgconfig.sysconfdir=$out/etc/pljava.policy \ + -Dpgconfig.pkglibdir=$out/lib \ + -jar $out/pljavabuild/pljava-packaging/target/pljava-pg15.jar + cp $out/share/pljava/* $out/share/postgresql/extension/pljava + cp $out/share/pljava/* $out/share/postgresql/pljava + cp $out/share/extension/*.control $out/share/postgresql/extension + rm -r $out/pljavabuild + ''; + + meta = with lib; { + description = "PL/Java extension for PostgreSQL"; + homepage = https://github.com/tada/pljava; + license = licenses.bsd3; + maintainers = [ maintainers.samrose ]; # Update with actual maintainer info + }; +} diff --git a/nix/tests/postgresql.conf.in b/nix/tests/postgresql.conf.in index 4c5075aa..22d1b93f 100644 --- a/nix/tests/postgresql.conf.in +++ b/nix/tests/postgresql.conf.in @@ -793,3 +793,4 @@ shared_preload_libraries = 'auto_explain,pgsodium' # Add settings for extensions here pgsodium.getkey_script = '@PGSODIUM_GETKEY_SCRIPT@' +pljava.libjvm_location = '@PLJAVA_LIBJVM_LOCATION@' diff --git a/nix/tests/prime.sql b/nix/tests/prime.sql index 084ad3b5..5a0e88f5 100644 --- a/nix/tests/prime.sql +++ b/nix/tests/prime.sql @@ -20,3 +20,4 @@ CREATE EXTENSION IF NOT EXISTS pg_graphql; CREATE EXTENSION IF NOT EXISTS pg_jsonschema; CREATE EXTENSION IF NOT EXISTS hypopg; CREATE EXTENSION IF NOT EXISTS index_advisor; +CREATE EXTENSION IF NOT EXISTS pljava; diff --git a/nix/tools/run-server.sh.in b/nix/tools/run-server.sh.in index c5b6eb04..b620a0f1 100644 --- a/nix/tools/run-server.sh.in +++ b/nix/tools/run-server.sh.in @@ -27,6 +27,7 @@ PGSQL_SUPERUSER=@PGSQL_SUPERUSER@ PSQL_CONF_FILE=@PSQL_CONF_FILE@ PGSODIUM_GETKEY_SCRIPT=@PGSODIUM_GETKEY@ PORTNO="${2:-@PGSQL_DEFAULT_PORT@}" +PLJAVA_LIBJVM_LOCATION=@LIBJVM_LOCATION@ DATDIR=$(mktemp -d) mkdir -p "$DATDIR" @@ -38,8 +39,9 @@ echo initdb -U "$PGSQL_SUPERUSER" -D "$DATDIR" --locale=C echo "NOTE: patching postgresql.conf files" -sed \ - "s#@PGSODIUM_GETKEY_SCRIPT@#$PGSODIUM_GETKEY_SCRIPT#g" \ - $PSQL_CONF_FILE > "$DATDIR/postgresql.conf" +echo "pljava libjvm location: $PLJAVA_LIBJVM_LOCATION" +sed -e "s#@PGSODIUM_GETKEY_SCRIPT@#$PGSODIUM_GETKEY_SCRIPT#g" \ + -e "s#@PLJAVA_LIBJVM_LOCATION@#$PLJAVA_LIBJVM_LOCATION#g" \ + $PSQL_CONF_FILE > "$DATDIR/postgresql.conf" exec postgres -p "$PORTNO" -D "$DATDIR" -k /tmp [parent: 64db8d6519d9]