about summary refs log tree commit diff
path: root/pkgs/servers/sql
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/servers/sql')
-rw-r--r--pkgs/servers/sql/mariadb/default.nix124
-rw-r--r--pkgs/servers/sql/postgresql/ext/pgvector.nix4
-rw-r--r--pkgs/servers/sql/postgresql/ext/plv8.nix44
-rw-r--r--pkgs/servers/sql/postgresql/packages.nix4
-rw-r--r--pkgs/servers/sql/proxysql/default.nix4
5 files changed, 117 insertions, 63 deletions
diff --git a/pkgs/servers/sql/mariadb/default.nix b/pkgs/servers/sql/mariadb/default.nix
index 82fdc2a3a38b6..3f1f3448dad8d 100644
--- a/pkgs/servers/sql/mariadb/default.nix
+++ b/pkgs/servers/sql/mariadb/default.nix
@@ -2,8 +2,8 @@
 # Native buildInputs components
 , bison, boost, cmake, fixDarwinDylibNames, flex, makeWrapper, pkg-config
 # Common components
-, curl, libiconv, ncurses, openssl, pcre2
-, libkrb5, liburing, systemd
+, curl, libiconv, ncurses, openssl, pcre, pcre2
+, libkrb5, libaio, liburing, systemd
 , CoreServices, cctools, perl
 , jemalloc, less
 # Server components
@@ -14,36 +14,37 @@
 , withStorageRocks ? true
 }:
 
-with lib;
-
 let # in mariadb # spans the whole file
 
 libExt = stdenv.hostPlatform.extensions.sharedLibrary;
 
 mytopEnv = perl.withPackages (p: with p; [ DBDmysql DBI TermReadKey ]);
 
-mariadb = server // {
-  inherit client; # MariaDB Client
-  server = server; # MariaDB Server
+mariadbPackage = packageSettings: (server packageSettings) // {
+  client = client packageSettings; # MariaDB Client
+  server = server packageSettings; # MariaDB Server
 };
 
-common = rec { # attributes common to both builds
-  version = "10.6.5";
+commonOptions = packageSettings: rec { # attributes common to both builds
+  inherit (packageSettings) version;
 
   src = fetchurl {
     url = "https://downloads.mariadb.com/MariaDB/mariadb-${version}/source/mariadb-${version}.tar.gz";
-    sha256 = "sha256-4L4EBCjZpCqLtL0iG1Z/8lIs1vqJBjhic9pPA8XCCo8=";
+    inherit (packageSettings) sha256;
   };
 
   nativeBuildInputs = [ cmake pkg-config ]
-    ++ optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames
-    ++ optional (!stdenv.hostPlatform.isDarwin) makeWrapper;
+    ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames
+    ++ lib.optional (!stdenv.hostPlatform.isDarwin) makeWrapper;
 
   buildInputs = [
-    curl libiconv ncurses openssl pcre2 zlib
-  ] ++ optionals stdenv.hostPlatform.isLinux [ libkrb5 liburing systemd ]
-    ++ optionals stdenv.hostPlatform.isDarwin [ CoreServices cctools perl ]
-    ++ optional (!stdenv.hostPlatform.isDarwin) [ jemalloc ];
+    curl libiconv ncurses openssl zlib
+  ] ++ (packageSettings.extraBuildInputs or [])
+    ++ lib.optionals stdenv.hostPlatform.isLinux ([ libkrb5 systemd ]
+    ++ (if (lib.versionOlder version "10.6") then [ libaio ] else [ liburing ]))
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ CoreServices cctools perl ]
+    ++ lib.optional (!stdenv.hostPlatform.isDarwin) [ jemalloc ]
+    ++ (if (lib.versionOlder version "10.5") then [ pcre ] else [ pcre2 ]);
 
   prePatch = ''
     sed -i 's,[^"]*/var/log,/var/log,g' storage/mroonga/vendor/groonga/CMakeLists.txt
@@ -54,7 +55,7 @@ common = rec { # attributes common to both builds
   ]
   # Fixes a build issue as documented on
   # https://jira.mariadb.org/browse/MDEV-26769?focusedCommentId=206073&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-206073
-  ++ lib.optional (!stdenv.isLinux) ./patch/macos-MDEV-26769-regression-fix.patch;
+  ++ lib.optional (!stdenv.hostPlatform.isLinux && lib.versionAtLeast version "10.6") ./patch/macos-MDEV-26769-regression-fix.patch;
 
   cmakeFlags = [
     "-DBUILD_CONFIG=mysql_release"
@@ -86,7 +87,7 @@ common = rec { # attributes common to both builds
     "-DWITH_SAFEMALLOC=OFF"
     "-DWITH_UNIT_TESTS=OFF"
     "-DEMBEDDED_LIBRARY=OFF"
-  ] ++ optionals stdenv.hostPlatform.isDarwin [
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
     # On Darwin without sandbox, CMake will find the system java and attempt to build with java support, but
     # then it will fail during the actual build. Let's just disable the flag explicitly until someone decides
     # to pass in java explicitly.
@@ -98,37 +99,39 @@ common = rec { # attributes common to both builds
     # Remove Development components. Need to use libmysqlclient.
     rm "$out"/lib/mysql/plugin/daemon_example.ini
     rm "$out"/lib/{libmariadbclient.a,libmysqlclient.a,libmysqlclient_r.a,libmysqlservices.a}
-    rm "$out"/bin/{mariadb-config,mariadb_config,mysql_config}
+    rm -f "$out"/bin/{mariadb-config,mariadb_config,mysql_config}
     rm -r $out/include
     rm -r $out/lib/pkgconfig
   '';
 
   # perlPackages.DBDmysql is broken on darwin
-  postFixup = optionalString (!stdenv.hostPlatform.isDarwin) ''
-    wrapProgram $out/bin/mytop --set PATH ${makeBinPath [ less ncurses ]}
+  postFixup = lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
+    wrapProgram $out/bin/mytop --set PATH ${lib.makeBinPath [ less ncurses ]}
   '';
 
-  passthru.mysqlVersion = "5.7";
-
-  passthru.tests = {
-    mariadb-galera-mariabackup = nixosTests.mariadb-galera-mariabackup;
-    mariadb-galera-rsync = nixosTests.mariadb-galera-rsync;
-    mysql = nixosTests.mysql;
-    mysql-autobackup = nixosTests.mysql-autobackup;
-    mysql-backup = nixosTests.mysql-backup;
-    mysql-replication = nixosTests.mysql-replication;
+  passthru.tests = let
+    testVersion = "mariadb_${builtins.replaceStrings ["."] [""] (lib.versions.majorMinor (packageSettings.version))}";
+  in {
+    mariadb-galera-rsync = nixosTests.mariadb-galera.${testVersion};
+    mysql = nixosTests.mysql.${testVersion};
+    mysql-autobackup = nixosTests.mysql-autobackup.${testVersion};
+    mysql-backup = nixosTests.mysql-backup.${testVersion};
+    mysql-replication = nixosTests.mysql-replication.${testVersion};
   };
 
-  meta = {
+  meta = with lib; {
     description = "An enhanced, drop-in replacement for MySQL";
     homepage    = "https://mariadb.org/";
     license     = licenses.gpl2;
-    maintainers = with maintainers; [ thoughtpolice ];
+    maintainers = with maintainers; [ thoughtpolice ajs124 das_j ];
     platforms   = platforms.all;
   };
 };
 
-client = stdenv.mkDerivation (common // {
+client = packageSettings: let
+  common = commonOptions packageSettings;
+
+in stdenv.mkDerivation (common // {
   pname = "mariadb-client";
 
   outputs = [ "out" "man" ];
@@ -153,7 +156,10 @@ client = stdenv.mkDerivation (common // {
   '';
 });
 
-server = stdenv.mkDerivation (common // {
+server = packageSettings: let
+  common = commonOptions packageSettings;
+
+in stdenv.mkDerivation (common // {
   pname = "mariadb-server";
 
   outputs = [ "out" "man" ];
@@ -163,11 +169,11 @@ server = stdenv.mkDerivation (common // {
   buildInputs = common.buildInputs ++ [
     bzip2 lz4 lzo snappy xz zstd
     cracklib judy libevent libxml2
-  ] ++ optional (stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAarch32) numactl
-    ++ optionals stdenv.hostPlatform.isLinux [ linux-pam ]
-    ++ optional (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isx86_64) pmdk.dev
-    ++ optional (!stdenv.hostPlatform.isDarwin) mytopEnv
-    ++ optionals withStorageMroonga [ kytea libsodium msgpack zeromq ];
+  ] ++ lib.optional (stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAarch32) numactl
+    ++ lib.optionals stdenv.hostPlatform.isLinux [ linux-pam ]
+    ++ lib.optional (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isx86_64) pmdk.dev
+    ++ lib.optional (!stdenv.hostPlatform.isDarwin) mytopEnv
+    ++ lib.optionals withStorageMroonga [ kytea libsodium msgpack zeromq ];
 
   patches = common.patches;
 
@@ -188,38 +194,54 @@ server = stdenv.mkDerivation (common // {
     "-DWITHOUT_EXAMPLE=1"
     "-DWITHOUT_FEDERATED=1"
     "-DWITHOUT_TOKUDB=1"
-  ] ++ optional (stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAarch32) [
+  ] ++ lib.optional (stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAarch32) [
     "-DWITH_NUMA=ON"
-  ] ++ optional (!withStorageMroonga) [
+  ] ++ lib.optional (!withStorageMroonga) [
     "-DWITHOUT_MROONGA=1"
-  ] ++ optional (!withStorageRocks) [
+  ] ++ lib.optional (!withStorageRocks) [
     "-DWITHOUT_ROCKSDB=1"
-  ] ++ optional (!stdenv.hostPlatform.isDarwin && withStorageRocks) [
+  ] ++ lib.optional (!stdenv.hostPlatform.isDarwin && withStorageRocks) [
     "-DWITH_ROCKSDB_JEMALLOC=ON"
-  ] ++ optional (!stdenv.hostPlatform.isDarwin) [
+  ] ++ lib.optional (!stdenv.hostPlatform.isDarwin) [
     "-DWITH_JEMALLOC=yes"
-  ] ++ optionals stdenv.hostPlatform.isDarwin [
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
     "-DPLUGIN_AUTH_PAM=OFF"
     "-DWITHOUT_OQGRAPH=1"
     "-DWITHOUT_PLUGIN_S3=1"
   ];
 
-  preConfigure = optionalString (!stdenv.hostPlatform.isDarwin) ''
+  preConfigure = lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
     patchShebangs scripts/mytop.sh
   '';
 
   postInstall = common.postInstall + ''
     rm -r "$out"/share/aclocal
     chmod +x "$out"/bin/wsrep_sst_common
-    rm "$out"/bin/{mariadb-client-test,mariadb-test,mysql_client_test,mysqltest}
-  '' + optionalString withStorageMroonga ''
+    rm -f "$out"/bin/{mariadb-client-test,mariadb-test,mysql_client_test,mysqltest}
+  '' + lib.optionalString withStorageMroonga ''
     mv "$out"/share/{groonga,groonga-normalizer-mysql} "$out"/share/doc/mysql
-  '' + optionalString (!stdenv.hostPlatform.isDarwin) ''
+  '' + lib.optionalString (!stdenv.hostPlatform.isDarwin && lib.versionAtLeast common.version "10.4") ''
     mv "$out"/OFF/suite/plugins/pam/pam_mariadb_mtr.so "$out"/share/pam/lib/security
     mv "$out"/OFF/suite/plugins/pam/mariadb_mtr "$out"/share/pam/etc/security
     rm -r "$out"/OFF
   '';
 
-  CXXFLAGS = optionalString stdenv.hostPlatform.isi686 "-fpermissive";
+  CXXFLAGS = lib.optionalString stdenv.hostPlatform.isi686 "-fpermissive";
 });
-in mariadb
+in {
+  mariadb_104 = mariadbPackage {
+    # Supported until 2024-06-18
+    version = "10.4.22";
+    sha256 = "000ca1hdnj2jg051cjgdd2ralgwgh2p8nwb1x6b85202xdpc7ga4";
+  };
+  mariadb_105 = mariadbPackage {
+    # Supported until 2025-06-24
+    version = "10.5.13";
+    sha256 = "0n0w1pyypv6wsknaqyykj3lc9zv6smji4q5jcf90w4rid330iw0n";
+  };
+  mariadb_106 = mariadbPackage {
+    # Supported until 2026-07
+    version = "10.6.5";
+    sha256 = "13qaqb2h6kysfdi3h1l9zbb2qlpjgxb1n8mxnj5jm96r50209gp0";
+  };
+}
diff --git a/pkgs/servers/sql/postgresql/ext/pgvector.nix b/pkgs/servers/sql/postgresql/ext/pgvector.nix
index c1bd999ebf558..d2a783354f49b 100644
--- a/pkgs/servers/sql/postgresql/ext/pgvector.nix
+++ b/pkgs/servers/sql/postgresql/ext/pgvector.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "pgvector";
-  version = "0.2.0";
+  version = "0.2.2";
 
   src = fetchFromGitHub {
     owner = "ankane";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1jl6rpys24qxhkv3q798pp9v03z2z7gswivp19yria9xr3bg6wjv";
+    sha256 = "sha256-rdhmdfxRK4rdgGsv8Rdokm46N/+S3ZwArkW5eJTQGsY=";
   };
 
   buildInputs = [ postgresql ];
diff --git a/pkgs/servers/sql/postgresql/ext/plv8.nix b/pkgs/servers/sql/postgresql/ext/plv8.nix
index 6f5411340e457..eaf9c389e926a 100644
--- a/pkgs/servers/sql/postgresql/ext/plv8.nix
+++ b/pkgs/servers/sql/postgresql/ext/plv8.nix
@@ -1,6 +1,8 @@
-{ lib, stdenv, fetchFromGitHub, v8, perl, postgresql }:
+{ lib, stdenv, fetchFromGitHub, v8, perl, postgresql
+# For test
+, runCommand, coreutils, gnugrep }:
 
-stdenv.mkDerivation rec {
+let self = stdenv.mkDerivation rec {
   pname = "plv8";
   version = "3.0.0";
 
@@ -29,6 +31,8 @@ stdenv.mkDerivation rec {
   ];
 
   preConfigure = ''
+    # We build V8 as a monolith, so this is unnecessary.
+    substituteInPlace Makefile.shared --replace "-lv8_libplatform" ""
     patchShebangs ./generate_upgrade.sh
     substituteInPlace generate_upgrade.sh \
       --replace " 2.3.10)" " 2.3.10 2.3.11 2.3.12 2.3.13 2.3.14 2.3.15)"
@@ -42,10 +46,36 @@ stdenv.mkDerivation rec {
     rmdir "$out/nix/store"/* "$out/nix/store" "$out/nix"
   '';
 
-  # Without this, PostgreSQL will crash at runtime.
-  # The flags are only included in Makefile, not Makefile.shared.
-  # https://github.com/plv8/plv8/pull/469
-  NIX_CFLAGS_COMPILE = "-DJSONB_DIRECT_CONVERSION -DV8_COMPRESS_POINTERS=1 -DV8_31BIT_SMIS_ON_64BIT_ARCH=1";
+  NIX_CFLAGS_COMPILE = [
+    # V8 depends on C++14.
+    "-std=c++14"
+    # Without this, PostgreSQL will crash at runtime.
+    # The flags are only included in Makefile, not Makefile.shared.
+    # https://github.com/plv8/plv8/pull/469
+    "-DJSONB_DIRECT_CONVERSION" "-DV8_COMPRESS_POINTERS=1" "-DV8_31BIT_SMIS_ON_64BIT_ARCH=1"
+  ];
+
+  passthru.tests.smoke = runCommand "${pname}-test" {} ''
+    export PATH=${lib.makeBinPath [ (postgresql.withPackages (_: [self])) coreutils gnugrep ]}
+    db="$PWD/testdb"
+    initdb "$db"
+    postgres -k "$db" -D "$db" &
+    pid="$!"
+
+    for i in $(seq 1 100); do
+      if psql -h "$db" -d postgres -c "" 2>/dev/null; then
+        break
+      elif ! kill -0 "$pid"; then
+        exit 1
+      else
+        sleep 0.1
+      fi
+    done
+
+    psql -h "$db" -d postgres -c 'CREATE EXTENSION plv8; DO $$ plv8.elog(NOTICE, plv8.version); $$ LANGUAGE plv8;' 2> "$out"
+    grep -q "${version}" "$out"
+    kill -0 "$pid"
+  '';
 
   meta = with lib; {
     description = "V8 Engine Javascript Procedural Language add-on for PostgreSQL";
@@ -54,4 +84,4 @@ stdenv.mkDerivation rec {
     platforms = [ "x86_64-linux" ];
     license = licenses.postgresql;
   };
-}
+}; in self
diff --git a/pkgs/servers/sql/postgresql/packages.nix b/pkgs/servers/sql/postgresql/packages.nix
index e751ae621f32d..f3df8a99ca227 100644
--- a/pkgs/servers/sql/postgresql/packages.nix
+++ b/pkgs/servers/sql/postgresql/packages.nix
@@ -26,7 +26,9 @@ self: super: {
 
     plr = super.callPackage ./ext/plr.nix { };
 
-    plv8 = super.callPackage ./ext/plv8.nix { };
+    plv8 = super.callPackage ./ext/plv8.nix {
+      v8 = self.v8_8_x;
+    };
 
     pgjwt = super.callPackage ./ext/pgjwt.nix { };
 
diff --git a/pkgs/servers/sql/proxysql/default.nix b/pkgs/servers/sql/proxysql/default.nix
index 078ebfb7b6e4f..142dfe29fa226 100644
--- a/pkgs/servers/sql/proxysql/default.nix
+++ b/pkgs/servers/sql/proxysql/default.nix
@@ -25,7 +25,7 @@
 , pcre
 , perl
 , prometheus-cpp
-, python
+, python2
 , re2
 , zlib
 }:
@@ -56,7 +56,7 @@ stdenv.mkDerivation rec {
     cmake
     libtool
     perl
-    python
+    python2
   ];
 
   buildInputs = [