1{ stdenv, lib, fetchFromGitHub, postgresql, boost182, nixosTests }:
2
3let
4 version = "1.7.0";
5
6 main_src = fetchFromGitHub {
7 name = "datasketches-postgresql";
8 owner = "apache";
9 repo = "datasketches-postgresql";
10 rev = "refs/tags/${version}";
11 hash = "sha256-W41uAs3W4V7c9O/wBw3rut65bcmY8EdQS1/tPszMGqA=";
12 };
13
14 cpp_src = fetchFromGitHub {
15 name = "datasketches-cpp";
16 owner = "apache";
17 repo = "datasketches-cpp";
18 rev = "refs/tags/5.0.2";
19 hash = "sha256-yGk1OckYipAgLTQK6w6p6EdHMxBIQSjPV/MMND3cDks=";
20 };
21in
22
23stdenv.mkDerivation {
24 pname = "apache_datasketches";
25 inherit version;
26
27 srcs = [ main_src cpp_src ];
28
29 sourceRoot = main_src.name;
30
31 buildInputs = [ postgresql boost182 ];
32
33 patchPhase = ''
34 runHook prePatch
35 cp -r ../${cpp_src.name} .
36 runHook postPatch
37 '';
38
39 installPhase = ''
40 runHook preInstall
41 install -D -m 644 ./datasketches${postgresql.dlSuffix} -t $out/lib/
42 cat \
43 sql/datasketches_cpc_sketch.sql \
44 sql/datasketches_kll_float_sketch.sql \
45 sql/datasketches_kll_double_sketch.sql \
46 sql/datasketches_theta_sketch.sql \
47 sql/datasketches_frequent_strings_sketch.sql \
48 sql/datasketches_hll_sketch.sql \
49 sql/datasketches_aod_sketch.sql \
50 sql/datasketches_req_float_sketch.sql \
51 sql/datasketches_quantiles_double_sketch.sql \
52 > sql/datasketches--${version}.sql
53 install -D -m 644 ./datasketches.control -t $out/share/postgresql/extension
54 install -D -m 644 \
55 ./sql/datasketches--${version}.sql \
56 ./sql/datasketches--1.3.0--1.4.0.sql \
57 ./sql/datasketches--1.4.0--1.5.0.sql \
58 ./sql/datasketches--1.5.0--1.6.0.sql \
59 ./sql/datasketches--1.6.0--1.7.0.sql \
60 -t $out/share/postgresql/extension
61 runHook postInstall
62 '';
63
64 passthru.tests.apache_datasketches = nixosTests.apache_datasketches;
65
66 meta = {
67 description = "PostgreSQL extension providing approximate algorithms for distinct item counts, quantile estimation and frequent items detection";
68 longDescription = ''
69 apache_datasketches is an extension to support approximate algorithms on PostgreSQL. The implementation
70 is based on the Apache Datasketches CPP library, and provides support for HyperLogLog,
71 Compressed Probabilistic Counting, KLL, Frequent strings, and Theta sketches.
72 '';
73 homepage = "https://datasketches.apache.org/";
74 platforms = postgresql.meta.platforms;
75 license = lib.licenses.asl20;
76 maintainers = with lib.maintainers; [ mmusnjak ];
77 };
78}