1{ lib
2, stdenv
3, cmake
4, fetchFromGitHub
5, postgresql
6, postgresqlTestHook
7}:
8
9stdenv.mkDerivation (finalAttrs: {
10 pname = "postgresql-lantern";
11 version = "0.2.4";
12
13 src = fetchFromGitHub {
14 owner = "lanterndata";
15 repo = "lantern";
16 rev = "v${finalAttrs.version}";
17 hash = "sha256-d5CdS11Z0u8+oPvjH6gVx6k8y05SS6wU3PnafcEgQeY=";
18 fetchSubmodules = true;
19 };
20
21 nativeBuildInputs = [
22 cmake
23 ];
24
25 buildInputs = [
26 postgresql
27 ];
28
29 installPhase = ''
30 runHook preInstall
31
32 install -D -t $out/lib lantern${postgresql.dlSuffix}
33 install -D -t $out/share/postgresql/extension lantern-*.sql
34 install -D -t $out/share/postgresql/extension lantern.control
35
36 runHook postInstall
37 '';
38
39 cmakeFlags = [
40 "-DBUILD_FOR_DISTRIBUTING=ON"
41 ];
42
43 passthru.tests.extension = stdenv.mkDerivation {
44 name = "lantern-pg-test";
45 dontUnpack = true;
46 doCheck = true;
47 buildInputs = [ postgresqlTestHook ];
48 nativeCheckInputs = [ (postgresql.withPackages (_: [ finalAttrs.finalPackage ])) ];
49 postgresqlTestUserOptions = "LOGIN SUPERUSER";
50 passAsFile = [ "sql" ];
51 sql = ''
52 CREATE EXTENSION lantern;
53
54 CREATE TABLE small_world (id integer, vector real[3]);
55 INSERT INTO small_world (id, vector) VALUES (0, '{0,0,0}'), (1, '{0,0,1}');
56
57 CREATE INDEX ON small_world USING hnsw (vector dist_l2sq_ops)
58 WITH (M=2, ef_construction=10, ef=4, dim=3);
59 '';
60 failureHook = "postgresqlStop";
61 checkPhase = ''
62 runHook preCheck
63 psql -a -v ON_ERROR_STOP=1 -f $sqlPath
64 runHook postCheck
65 '';
66 installPhase = "touch $out";
67 };
68
69 meta = with lib; {
70 description = "PostgreSQL vector database extension for building AI applications";
71 homepage = "https://lantern.dev/";
72 changelog = "https://github.com/lanterndata/lantern/blob/${finalAttrs.src.rev}/CHANGELOG.md";
73 license = licenses.bsl11;
74 maintainers = [ ];
75 platforms = postgresql.meta.platforms;
76 # error: use of undeclared identifier 'aligned_alloc'
77 broken = stdenv.isDarwin && lib.versionOlder stdenv.hostPlatform.darwinMinVersion "10.13";
78 };
79})