1{ pkgs, ... }:
2let
3 creds = pkgs.writeText ".monetdb" ''
4 user=monetdb
5 password=monetdb
6 '';
7 createUser = pkgs.writeText "createUser.sql" ''
8 CREATE USER "voc" WITH PASSWORD 'voc' NAME 'VOC Explorer' SCHEMA "sys";
9 CREATE SCHEMA "voc" AUTHORIZATION "voc";
10 ALTER USER "voc" SET SCHEMA "voc";
11 '';
12 credsVoc = pkgs.writeText ".monetdb" ''
13 user=voc
14 password=voc
15 '';
16 transaction = pkgs.writeText "transaction" ''
17 START TRANSACTION;
18 CREATE TABLE test (id int, data varchar(30));
19 ROLLBACK;
20 '';
21 vocData = pkgs.fetchzip {
22 url = "https://dev.monetdb.org/Assets/VOC/voc_dump.zip";
23 hash = "sha256-sQ5acTsSAiXQfOgt2PhN7X7Z9TZGZtLrPPxgQT2pCGQ=";
24 };
25 onboardPeople = pkgs.writeText "onboardPeople" ''
26 CREATE VIEW onboard_people AS
27 SELECT * FROM (
28 SELECT 'craftsmen' AS type, craftsmen.* FROM craftsmen
29 UNION ALL
30 SELECT 'impotenten' AS type, impotenten.* FROM impotenten
31 UNION ALL
32 SELECT 'passengers' AS type, passengers.* FROM passengers
33 UNION ALL
34 SELECT 'seafarers' AS type, seafarers.* FROM seafarers
35 UNION ALL
36 SELECT 'soldiers' AS type, soldiers.* FROM soldiers
37 UNION ALL
38 SELECT 'total' AS type, total.* FROM total
39 ) AS onboard_people_table;
40 SELECT type, COUNT(*) AS total
41 FROM onboard_people GROUP BY type ORDER BY type;
42 '';
43 onboardExpected = pkgs.lib.strings.replaceStrings [ "\n" ] [ "\\n" ] ''
44 +------------+-------+
45 | type | total |
46 +============+=======+
47 | craftsmen | 2349 |
48 | impotenten | 938 |
49 | passengers | 2813 |
50 | seafarers | 4468 |
51 | soldiers | 4177 |
52 | total | 2467 |
53 +------------+-------+
54 '';
55in
56{
57 name = "monetdb";
58 meta = with pkgs.lib.maintainers; {
59 maintainers = [ StillerHarpo ];
60 };
61 nodes.machine.services.monetdb.enable = true;
62 testScript = ''
63 machine.start()
64 machine.wait_for_unit("monetdb")
65 machine.succeed("monetdbd create mydbfarm")
66 machine.succeed("monetdbd start mydbfarm")
67 machine.succeed("monetdb create voc")
68 machine.succeed("monetdb release voc")
69 machine.succeed("cp ${creds} ./.monetdb")
70 assert "hello world" in machine.succeed("mclient -d voc -s \"SELECT 'hello world'\"")
71 machine.succeed("mclient -d voc ${createUser}")
72 machine.succeed("cp ${credsVoc} ./.monetdb")
73 machine.succeed("mclient -d voc ${transaction}")
74 machine.succeed("mclient -d voc ${vocData}/voc_dump.sql")
75 assert "8131" in machine.succeed("mclient -d voc -s \"SELECT count(*) FROM voyages\"")
76 assert "${onboardExpected}" in machine.succeed("mclient -d voc ${onboardPeople}")
77
78 '';
79}