services: wireguard: Add keep-alive support.
[jackhill/guix/guix.git] / gnu / packages / databases.scm
CommitLineData
5f96f303 1;;; GNU Guix --- Functional package management for GNU
189be331 2;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
a8714bf6
RW
3;;; Copyright © 2012, 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
4;;; Copyright © 2013, 2017 Cyril Roelandt <tipecaml@gmail.com>
218a2106 5;;; Copyright © 2014, 2016 David Thompson <davet@gnu.org>
b9ed5ef3 6;;; Copyright © 2014, 2015, 2016, 2018 Mark H Weaver <mhw@netris.org>
a8714bf6 7;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org>
da1f7a9e 8;;; Copyright © 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
b747a9db 9;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
a8714bf6
RW
10;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
11;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
12;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
9930beb8 13;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
3c986a7d 14;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
6d09a7b5 15;;; Copyright © 2016, 2017, 2018 Roel Janssen <roel@gnu.org>
0e1b262e 16;;; Copyright © 2016 David Craven <david@craven.ch>
fe71eee0 17;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
62ea44fc 18;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
a8714bf6 19;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
51d42caa 20;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
c336567d 21;;; Copyright © 2017, 2018 Julien Lepiller <julien@lepiller.eu>
7dc0f1d5 22;;; Copyright © 2017, 2020 Thomas Danckaert <post@thomasdanckaert.be>
a8714bf6
RW
23;;; Copyright © 2017 Jelle Licht <jlicht@fsfe.org>
24;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
d39a84e8 25;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
5aa81639 26;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
38abef12 27;;; Copyright © 2017, 2018 Alex Vong <alexvong1995@gmail.com>
19601e89 28;;; Copyright © 2017, 2018 Ben Woodcroft <donttrustben@gmail.com>
231123ee 29;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
7bcc3405 30;;; Copyright © 2017, 2018 Pierre Langlois <pierre.langlois@gmx.com>
e58d3a59 31;;; Copyright © 2015, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
16973071 32;;; Copyright © 2017 Kristofer Buffington <kristoferbuffington@gmail.com>
3926a099 33;;; Copyright © 2018 Amirouche Boubekki <amirouche@hypermove.net>
dae7661a 34;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
9bab0950 35;;; Copyright © 2018, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
9df78675 36;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
a3abc3fd 37;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
91477def 38;;; Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>
450d5dc2 39;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
4e902da6 40;;; Copyright © 2019, 2021 Guillaume Le Vaillant <glv@posteo.net>
2072bc08 41;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
659bc436 42;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
1655e7be 43;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
ba0b249d 44;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
8de54c63 45;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
d343e0fe 46;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
945ec6c3 47;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
a7051a0e 48;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
0c0a2831 49;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
23af76f1 50;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
43c55856 51;;; Copyright © 2021 David Larsson <david.larsson@selfhosted.xyz>
5f96f303
LC
52;;;
53;;; This file is part of GNU Guix.
54;;;
55;;; GNU Guix is free software; you can redistribute it and/or modify it
56;;; under the terms of the GNU General Public License as published by
57;;; the Free Software Foundation; either version 3 of the License, or (at
58;;; your option) any later version.
59;;;
60;;; GNU Guix is distributed in the hope that it will be useful, but
61;;; WITHOUT ANY WARRANTY; without even the implied warranty of
62;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
63;;; GNU General Public License for more details.
64;;;
65;;; You should have received a copy of the GNU General Public License
66;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
67
68(define-module (gnu packages databases)
69 #:use-module (gnu packages)
58071723 70 #:use-module (gnu packages admin)
06a035db 71 #:use-module (gnu packages algebra)
4c6aa73b
RJ
72 #:use-module (gnu packages autotools)
73 #:use-module (gnu packages avahi)
77e52190 74 #:use-module (gnu packages base)
b747a9db 75 #:use-module (gnu packages bash)
06a035db 76 #:use-module (gnu packages bison)
23bbd7dd 77 #:use-module (gnu packages boost)
06a035db 78 #:use-module (gnu packages check)
dae7661a 79 #:use-module (gnu packages cmake)
06a035db 80 #:use-module (gnu packages compression)
62ea44fc 81 #:use-module (gnu packages crypto)
06a035db
MB
82 #:use-module (gnu packages curl)
83 #:use-module (gnu packages cyrus-sasl)
255d1bbe 84 #:use-module (gnu packages dbm)
06a035db 85 #:use-module (gnu packages emacs)
da602679 86 #:use-module (gnu packages flex)
2fa55c72 87 #:use-module (gnu packages gcc)
4c6aa73b
RJ
88 #:use-module (gnu packages gettext)
89 #:use-module (gnu packages glib)
06a035db 90 #:use-module (gnu packages gnupg)
33c88fcb 91 #:use-module (gnu packages golang)
100a4f84 92 #:use-module (gnu packages guile)
3f8158d6 93 #:use-module (gnu packages icu4c)
06a035db 94 #:use-module (gnu packages jemalloc)
708155df 95 #:use-module (gnu packages language)
3f8158d6 96 #:use-module (gnu packages libedit)
686144e9 97 #:use-module (gnu packages libevent)
5f96f303 98 #:use-module (gnu packages linux)
100a4f84
SH
99 #:use-module (gnu packages lisp)
100 #:use-module (gnu packages lisp-xyz)
a50628bb 101 #:use-module (gnu packages logging)
d39a84e8 102 #:use-module (gnu packages man)
a50628bb 103 #:use-module (gnu packages maths)
3f8158d6 104 #:use-module (gnu packages multiprecision)
5f96f303 105 #:use-module (gnu packages ncurses)
aace6f6d 106 #:use-module (gnu packages onc-rpc)
d3c6ad0a 107 #:use-module (gnu packages parallel)
77631745 108 #:use-module (gnu packages pcre)
06a035db 109 #:use-module (gnu packages perl)
5ccde207 110 #:use-module (gnu packages perl-check)
cabe8f18 111 #:use-module (gnu packages perl-web)
4c6aa73b 112 #:use-module (gnu packages pkg-config)
d3c6ad0a 113 #:use-module (gnu packages popt)
a50628bb 114 #:use-module (gnu packages protobuf)
06a035db 115 #:use-module (gnu packages python)
9763102b 116 #:use-module (gnu packages python-crypto)
312ec128 117 #:use-module (gnu packages python-science)
100a4f84 118 #:use-module (gnu packages python-web)
44d10b1f 119 #:use-module (gnu packages python-xyz)
4c6aa73b 120 #:use-module (gnu packages rdf)
06a035db 121 #:use-module (gnu packages readline)
a50628bb
KCB
122 #:use-module (gnu packages regex)
123 #:use-module (gnu packages rpc)
afcbb020 124 #:use-module (gnu packages ruby)
6bbbca90 125 #:use-module (gnu packages serialization)
9d0c291e 126 #:use-module (gnu packages sphinx)
cd0322a3 127 #:use-module (gnu packages sqlite)
06a035db 128 #:use-module (gnu packages tcl)
33c88fcb
CB
129 #:use-module (gnu packages terminals)
130 #:use-module (gnu packages textutils)
100a4f84 131 #:use-module (gnu packages time)
06a035db 132 #:use-module (gnu packages tls)
6bbbca90 133 #:use-module (gnu packages valgrind)
dae7661a 134 #:use-module (gnu packages web)
77631745 135 #:use-module (gnu packages xml)
0e1b262e 136 #:use-module ((guix licenses) #:prefix license:)
5f96f303
LC
137 #:use-module (guix packages)
138 #:use-module (guix download)
da602679 139 #:use-module (guix bzr-download)
16973071 140 #:use-module (guix git-download)
945ec6c3 141 #:use-module (guix hg-download)
9df78675 142 #:use-module (guix build-system emacs)
5f96f303 143 #:use-module (guix build-system gnu)
58071723 144 #:use-module (guix build-system go)
274da61d 145 #:use-module (guix build-system perl)
4d98bfaf 146 #:use-module (guix build-system python)
afcbb020 147 #:use-module (guix build-system ruby)
77631745 148 #:use-module (guix build-system cmake)
6e385b76 149 #:use-module (guix build-system scons)
9077cf68 150 #:use-module (guix build-system trivial)
329d13b8 151 #:use-module (guix utils)
29cfbfca 152 #:use-module (srfi srfi-1)
5f96f303
LC
153 #:use-module (srfi srfi-26)
154 #:use-module (ice-9 match))
155
4c6aa73b
RJ
156(define-public 4store
157 (package
158 (name "4store")
159 (version "1.1.6")
160 (source (origin
50e20b8f
EF
161 (method git-fetch)
162 (uri (git-reference
b0e7b699 163 (url "https://github.com/4store/4store")
50e20b8f
EF
164 (commit (string-append "v" version))))
165 (file-name (git-file-name name version))
4c6aa73b 166 (sha256
50e20b8f 167 (base32 "1kzdfmwpzy64cgqlkcz5v4klwx99w0jk7afckyf7yqbqb4rydmpk"))
ea09f99f
RJ
168 (patches (search-patches "4store-unset-preprocessor-directive.patch"
169 "4store-fix-buildsystem.patch"))))
4c6aa73b
RJ
170 (build-system gnu-build-system)
171 (native-inputs
172 `(("perl" ,perl)
173 ("python" ,python-2)
174 ("autoconf" ,autoconf)
175 ("automake" ,automake)
b94a6ca0 176 ("gettext" ,gettext-minimal)
4c6aa73b 177 ("libtool" ,libtool)
74c8b174 178 ("pcre" ,pcre "bin") ;for 'pcre-config'
4c6aa73b
RJ
179 ("pkg-config" ,pkg-config)))
180 (inputs
181 `(("glib" ,glib)
182 ("rasqal" ,rasqal)
183 ("libxml2" ,libxml2)
184 ("raptor2" ,raptor2)
185 ("readline" ,readline)
186 ("avahi" ,avahi)
4c6aa73b
RJ
187 ("cyrus-sasl" ,cyrus-sasl)
188 ("openssl" ,openssl)
bb93042c 189 ("util-linux" ,util-linux "lib")))
4c6aa73b 190 ;; http://www.4store.org has been down for a while now.
bbf9092b 191 (home-page "https://github.com/4store/4store")
4c6aa73b
RJ
192 (synopsis "Clustered RDF storage and query engine")
193 (description "4store is a RDF/SPARQL store written in C, supporting
194either single machines or networked clusters.")
ba8b9f8d 195 (license license:gpl3+)))
4c6aa73b 196
6fc03fcc
CB
197(define-public ephemeralpg
198 (package
199 (name "ephemeralpg")
33df4763 200 (version "3.1")
6fc03fcc
CB
201 (source
202 (origin
203 (method url-fetch)
204 (uri (string-append
8e716256 205 "https://eradman.com/ephemeralpg/code/ephemeralpg-"
6fc03fcc
CB
206 version ".tar.gz"))
207 (sha256
33df4763 208 (base32 "1ap22ki8yz6agd0qybcjgs4b9izw1rwwcgpxn3jah2ccfyax34s6"))))
6fc03fcc
CB
209 (build-system gnu-build-system)
210 (arguments
ddb418b5 211 `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
6fc03fcc
CB
212 (string-append "PREFIX=" %output))
213 #:phases
214 (modify-phases %standard-phases
6c54d06e 215 (delete 'configure) ; no configure script
6fc03fcc
CB
216 (add-after 'install 'wrap
217 (lambda* (#:key inputs outputs #:allow-other-keys)
218 (let ((out (assoc-ref outputs "out")))
219 (wrap-program (string-append out "/bin/pg_tmp")
220 `("PATH" ":" prefix
221 (,(string-append (assoc-ref inputs "util-linux")
222 "/bin")
223 ,(string-append (assoc-ref inputs "postgresql")
224 "/bin")
fa8343de 225 ;; For getsocket.
6fc03fcc 226 ,(string-append out "/bin")))))
6c54d06e
TGR
227 #t)))
228 #:test-target "test"))
6fc03fcc
CB
229 (inputs
230 `(("postgresql" ,postgresql)
231 ("util-linux" ,util-linux)))
232 (native-inputs
6c54d06e 233 ;; For tests.
fa8343de
TGR
234 `(("ruby" ,ruby)
235 ("which" ,which)))
8e716256 236 (home-page "https://eradman.com/ephemeralpg/")
6fc03fcc
CB
237 (synopsis "Run temporary PostgreSQL databases")
238 (description
239 "@code{pg_tmp} creates temporary PostgreSQL databases, suitable for tasks
240like running software test suites. Temporary databases created with
241@code{pg_tmp} have a limited shared memory footprint and are automatically
242garbage-collected after a configurable number of seconds (the default is
24360).")
244 (license license:isc)))
245
afcbb020
CB
246(define-public es-dump-restore
247 (package
248 (name "es-dump-restore")
249 (version "2.1.0")
250 (source
251 (origin
252 (method url-fetch)
253 (uri (rubygems-uri "es_dump_restore" version))
254 (sha256
255 (base32
256 "020yk7f1hw48clmf5501z3xv9shsdchyymcv0y2cci2c1xvr1mim"))))
257 (build-system ruby-build-system)
258 (arguments
0076f5a9 259 '(#:tests? #f)) ;; No testsuite.
afcbb020
CB
260 (propagated-inputs
261 `(("ruby-httpclient" ,ruby-httpclient)
262 ("ruby-multi-json" ,ruby-multi-json)
263 ("ruby-progress_bar" ,ruby-progress_bar)
264 ("ruby-rubyzip" ,ruby-rubyzip)
265 ("ruby-thor" ,ruby-thor)))
266 (synopsis "Utility for dumping and restoring ElasticSearch indexes")
267 (description
268 "This package provides a utility for dumping the contents of an
269ElasticSearch index to a compressed file and restoring the dumpfile back to an
270ElasticSearch server")
271 (home-page "https://github.com/patientslikeme/es_dump_restore")
272 (license license:expat)))
273
3f8158d6
TGR
274(define-public firebird
275 (package
276 (name "firebird")
277 (version "3.0.7")
278 (source
279 (let ((revision "33374-0"))
280 (origin
281 (method url-fetch)
282 (uri (string-append "https://github.com/FirebirdSQL/"
283 "firebird/releases/download/R"
284 (string-replace-substring version "." "_") "/"
285 "Firebird-" version "." revision ".tar.bz2"))
286 (sha256
287 (base32 "0xpy1bncz36c6n28y7kllm1dkrdkn4vb4gw2n43f2351mznmrf5c"))
288 (modules '((guix build utils)))
289 (snippet
290 `(begin
291 (for-each
292 delete-file-recursively
293 (list "extern/btyacc/test" ; TODO: package and remove entirely
294 "extern/editline"
295 "extern/icu"
296 "extern/libtommath"
297 "extern/zlib"
298 "src/include/firebird/impl/boost"
299
300 ;; Missing licence.
301 "builds/install/arch-specific/solaris"
302 "extern/SfIO"
303 "src/msgs/templates.sql"
304
305 ;; Generated files missing sources.
306 "doc/Firebird-3-QuickStart.pdf"
307 (string-append "doc/Firebird-" ,version
308 "-ReleaseNotes.pdf")
309 "doc/README.SecureRemotePassword.html"))
310 #t)))))
311 (build-system gnu-build-system)
312 (outputs (list "debug" "out"))
313 (arguments
314 `(#:configure-flags
315 (let ((out (assoc-ref %outputs "out")))
316 (list (string-append "--with-fbsbin=" out "/sbin")
317 (string-append "--with-fbdoc=" out "/share/doc/"
318 ,name "-" ,version)
319 (string-append "--with-fbconf=" out "/lib/firebird")
320 (string-append "--with-fbintl=" out "/lib/firebird/intl")
321 (string-append "--with-fbmisc=" out "/lib/firebird/misc")
322 (string-append "--with-fbmsg=" out "/lib/firebird")
323 (string-append "--with-fbplugins=" out "/lib/firebird/plugins")
324 (string-append "--with-fbudf=" out "/lib/firebird/UDF")
325 "--with-fbglock=/run/firebird"
326 "--with-fblog=/var/log/firebird"
327 "--with-fbhelp=/var/lib/firebird/system"
328 "--with-fbsecure-db=/var/lib/firebird/secure"
329 "--without-fbsample"
330 "--without-fbsample-db"
331 "--with-system-editline"))
332 #:make-flags
333 (list (string-append "CC=" ,(cc-for-target))
334 ;; The plugins/ can't find libfbclient otherwise.
335 (string-append "LDFLAGS=-Wl,-rpath="
336 (assoc-ref %outputs "out") "/lib"))
337 #:tests? #f ; no test suite
338 #:modules ((guix build gnu-build-system)
339 (guix build utils)
340 (srfi srfi-26))
341 #:phases
342 (modify-phases %standard-phases
343 (add-after 'unpack 'use-system-boost
344 (lambda _
345 (substitute* "src/include/firebird/Message.h"
346 (("\"\\./impl/boost/preprocessor/seq/for_each_i\\.hpp\"")
347 "<boost/preprocessor/seq/for_each_i.hpp>")
348 (("FB_BOOST_") "BOOST_"))
349 #t))
350 (add-after 'unpack 'patch-installation
351 (lambda _
352 (substitute*
353 "builds/install/arch-specific/linux/makeInstallImage.sh.in"
354 (("/bin/sh") (which "bash"))
355 ;; Remove shell script helpers from $PATH.
356 (("(addLibs|cp) .*\\.sh .*@FB_SBINDIR@") ":")
357 ;; Put files where Guix users expect them.
358 (("(License\\.txt.*)@FB_CONFDIR" match)
359 (string-append match "@FB_DOCDIR@"))
360 (("@FB_CONFDIR@(.*License\\.txt.*)" match)
361 (string-append "@FB_DOCDIR@" match))
362 (("(cp .*/doc/.*)@FB_CONFDIR@(.*)" _ head tail)
363 (string-append head "@FB_DOCDIR@" tail "\n")))
364 (substitute*
365 (list "builds/install/posix-common/changeServerMode.sh.in"
366 "builds/install/posix-common/install.sh.in")
367 ;; Skip phases that (could) cause problems in Guix.
368 (("check(InstallUser|IfServerRunning|Libraries)|addFirebirdUser")
369 ":")
370 ;; Skip phases that are merely pointless on Guix.
371 (("buildUninstallFile|installInitdScript|startFirebird") ":")
372 ;; Omit randomly generated password with bonus timestamp.
373 (("setDBAPassword") ":"))
374
375 ;; These promote proprietary workflows not relevant on Guix.
376 (for-each delete-file-recursively
377 (find-files "doc" "README\\.(build\\.msvc|NT|Win)"))
378 #t))
379 (add-after 'configure 'delete-init-scripts
380 (lambda _
381 (delete-file-recursively "gen/install/misc")
382 #t))
383 (add-before 'build 'set-build-environment-variables
384 (lambda _
385 ;; ‘isql’ needs to run & find libfbclient.so during the build.
386 ;; This doubles as a rudimentary test in lieu of a test suite.
387 (setenv "LD_LIBRARY_PATH"
388 (string-append (assoc-ref %build-inputs "icu4c") "/lib"))
389 #t))
390 (add-before 'install 'keep-embedded-debug-symbols
391 (lambda _
392 ;; Let the gnu-build-system separate & deal with them later.
393 ;; XXX Upstream would use ‘--strip-unneeded’, shaving a whole
394 ;; megabyte off Guix's 7.7M libEngine12.so, for example.
395 (substitute* "gen/Makefile.install"
396 (("readelf") "false"))
397 #t))
398 (add-after 'install 'prune-undesirable-files
399 (lambda* (#:key outputs #:allow-other-keys)
400 (let ((out (assoc-ref outputs "out")))
401 (with-directory-excursion out
402 ;; Remove example binaries.
403 (for-each delete-file-recursively
404 (find-files "." "example"))
405 ;; Delete (now-)empty directories.
406 (for-each rmdir
407 (list "include/firebird/impl"
408 "lib/firebird/plugins/udr"))
409 #t)))))))
410 (inputs
411 `(("boost" ,boost)
412 ("editline" ,editline)
413 ("icu4c" ,icu4c-67)
414 ("libtommath" ,libtommath)
415 ("ncurses" ,ncurses)
416 ("zlib" ,zlib)))
417 (home-page "https://www.firebirdsql.org")
418 (synopsis "Relational database with many ANSI SQL standard features")
419 (description
420 "Firebird is an SQL @acronym{RDBMS, relational database management system}
e5d5146b
TGR
421with rich support for ANSI SQL (e.g., @code{INSERT...RETURNING}) including
422@acronym{UDFs, user-defined functions} and PSQL stored procedures, cursors, and
423triggers. Transactions provide full ACID-compliant referential integrity.
3f8158d6
TGR
424
425The database requires very little manual maintenance once set up, making it
426ideal for small business or embedded use.
427
428When installed as a traditional local or remote (network) database server,
429Firebird can grow to terabyte scale with proper tuning---although PostgreSQL
430may be a better choice for such very large environments.
431
432Firebird can also be embedded into stand-alone applications that don't want or
433need a full client & server. Used in this manner, it offers richer SQL support
434than SQLite as well as the option to seamlessly migrate to a client/server
435database later.")
436 (properties
437 `((lint-hidden-cve . ("CVE-2017-6369"))))
438 (license
439 ;; See doc/license/README.license.usage.txt for rationale & details.
440 (list license:bsd-3 ; src/common/sha2/
441 license:bsd-4 ; src/common/enc.cpp
442 license:gpl2+ ; builds/posix/make.defaults
443 (license:non-copyleft "file:///builds/install/misc/IPLicense.txt"
444 "InterBase Public License v1.0")
445 (license:non-copyleft "file:///builds/install/misc/IDPLicense.txt"
446 "Initial Developer's Public License v1.0")
447 license:lgpl2.1 ; exception for OSI-compatible licences
448 license:mpl1.1 ; examples/interfaces/0{6,8}*.cpp
449 license:public-domain)))) ; including files without explicit licence
450
b9f771a7
MB
451(define-public leveldb
452 (package
453 (name "leveldb")
3a32be71 454 (version "1.22")
b9f771a7 455 (source (origin
ad7c77fd
MB
456 (method git-fetch)
457 (uri (git-reference
458 (url "https://github.com/google/leveldb")
5cc013f0 459 (commit version)))
ad7c77fd 460 (file-name (git-file-name name version))
b9f771a7
MB
461 (sha256
462 (base32
3a32be71 463 "0qrnhiyq7r4wa1a4wi82zgns35smj94mcjsc7kfs1k6ia9ys79z7"))))
5cc013f0 464 (build-system cmake-build-system)
b9f771a7 465 (arguments
5cc013f0 466 `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON" "-DLEVELDB_BUILD_TESTS=ON")))
b9f771a7
MB
467 (inputs
468 `(("snappy" ,snappy)))
fd423e4d 469 (home-page "https://github.com/google/leveldb")
b9f771a7
MB
470 (synopsis "Fast key-value storage library")
471 (description
472 "LevelDB is a fast key-value storage library that provides an ordered
473mapping from string keys to string values.")
ba8b9f8d 474 (license license:bsd-3)))
b9f771a7 475
686144e9
CB
476(define-public memcached
477 (package
478 (name "memcached")
91d54249 479 (version "1.6.9")
686144e9
CB
480 (source
481 (origin
482 (method url-fetch)
483 (uri (string-append
484 "https://memcached.org/files/memcached-" version ".tar.gz"))
485 (sha256
91d54249 486 (base32 "1lcjy1b9krnb2gk72qd1fvivlfiyfvknfi3wngyvyk9ifzijr9nm"))))
686144e9
CB
487 (build-system gnu-build-system)
488 (inputs
489 `(("libevent" ,libevent)
490 ("cyrus-sasl" ,cyrus-sasl)))
491 (home-page "https://memcached.org/")
61d996b9
TGR
492 (synopsis "In-memory caching service")
493 (description "Memcached is an in-memory key-value store. It has a small
686144e9
CB
494and generic API, and was originally intended for use with dynamic web
495applications.")
496 (license license:bsd-3)))
497
da602679
MC
498(define-public libmemcached
499 (package
500 (name "libmemcached")
501 (version "1.0.18")
502 ;; We build from the sources since we want to build the extra HTML
503 ;; documentation which is not included with the release.
504 (source (origin
505 (method bzr-fetch)
506 (uri (bzr-reference
507 (url "lp:libmemcached/1.0")
508 (revision (string-append "tag:" version))))
509 (file-name (string-append name "-" version "-checkout"))
510 (sha256
511 (base32
737a3c12
TGR
512 "1842s4dxdh21gdr46q4dgxigidcs6dkqnbnqjwb9l8r0bqx5nb10"))
513 (patches
514 (search-patches "libmemcached-build-with-gcc7.patch"))))
da602679
MC
515 (build-system gnu-build-system)
516 (native-inputs
517 `(("memcached" ,memcached)
518 ("libtool" ,libtool)
519 ("autoconf" ,autoconf)
520 ("automake" ,automake)
521 ("bison" ,bison)
522 ("flex" ,flex)
523 ("perl" ,perl)
524 ("python-sphinx" ,python-sphinx))) ;to build the HTML doc.
525 (inputs
526 `(("libevent" ,libevent)
527 ("cyrus-sasl" ,cyrus-sasl)))
528 (outputs '("out" "doc"))
529 (arguments
9bab0950
MC
530 '(#:tests? #f ;many tests fail and use too much time
531 #:phases
da602679
MC
532 (modify-phases %standard-phases
533 (add-before 'bootstrap 'fix-configure.ac
534 ;; Move the AC_CONFIG_AUX_DIR macro use under AC_INIT, otherwise we
535 ;; get the error ``configure: error: cannot find install-sh,
536 ;; install.sh, or shtool in "." "./.." "./../.."`` (see:
537 ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=19539 and
538 ;; https://bugs.launchpad.net/libmemcached/+bug/1803922).
539 (lambda _
540 (delete-file "bootstrap.sh") ;not useful in the context of Guix
541 (substitute* "configure.ac"
542 (("^AC_CONFIG_AUX_DIR\\(\\[build-aux\\]\\).*") "")
9bab0950
MC
543 (("^AC_INIT.*" anchor)
544 (string-append anchor "AC_CONFIG_AUX_DIR([build-aux])\n")))))
545 (add-before 'build 'build-and-install-html-doc
da602679
MC
546 (lambda* (#:key outputs #:allow-other-keys)
547 (let ((html (string-append (assoc-ref outputs "doc")
548 "/share/doc/libmemcached/html/")))
549 (invoke "make" "install-html")
550 ;; Cleanup useless files.
551 (for-each delete-file-recursively
552 (map (lambda (x) (string-append html x))
9bab0950
MC
553 '("_sources" ".doctrees" ".buildinfo")))))))))
554 (home-page "https://libmemcached.org/libMemcached.html")
da602679
MC
555 (synopsis "C++ library for memcached")
556 (description "libMemcached is a library to use memcached in C/C++
557applications. It comes with a complete reference guide and documentation of
558the API, and provides features such as:
559@itemize
560@item Asynchronous and synchronous transport support
561@item Consistent hashing and distribution
562@item Tunable hashing algorithm to match keys
563@item Access to large object support
564@item Local replication
565@end itemize")
566 (license license:bsd-3)))
567
063edf92
MC
568(define-public python-pylibmc
569 (package
570 (name "python-pylibmc")
79bc9176 571 (version "1.6.1")
063edf92
MC
572 (source
573 (origin
574 (method url-fetch)
575 (uri (pypi-uri "pylibmc" version))
576 (sha256
79bc9176 577 (base32 "1sg7d9j0v6g3xg3finf4l1hb72c13vcyyi6rqrc9shbx903d93ca"))))
063edf92
MC
578 (build-system python-build-system)
579 (arguments
580 '(#:phases
581 (modify-phases %standard-phases
582 (add-before 'check 'start-memcached-daemon
583 ;; The test suite requires a memcached server.
584 (lambda _
585 (invoke "memcached" "-d"))))))
586 (native-inputs
587 `(("memcached" ,memcached)
588 ("python-nose" ,python-nose)))
589 (inputs
590 `(("libmemcached" ,libmemcached)
591 ("zlib" ,zlib)
592 ("cyrus-sasl" ,cyrus-sasl)))
79bc9176
TGR
593 (home-page "http://sendapatch.se/projects/pylibmc/")
594 (synopsis "Python client for memcached")
063edf92
MC
595 (description
596 "@code{pylibmc} is a client in Python for memcached. It is a wrapper
597around TangentOrg’s libmemcached library, and can be used as a drop-in
598replacement for the code@{python-memcached} library.")
599 (license license:bsd-3)))
600
601(define-public python2-pylibmc
602 (package-with-python2 python-pylibmc))
603
8de54c63 604(define-public mycli
605 (package
606 (name "mycli")
ce13a54a 607 (version "1.22.2")
8de54c63 608 (source
609 (origin
610 (method url-fetch)
611 (uri (pypi-uri "mycli" version))
612 (sha256
ce13a54a 613 (base32 "1lq2x95553vdmhw13cxcgsd2g2i32izhsb7hxd4m1iwf9b3msbpv"))))
8de54c63 614 (build-system python-build-system)
615 (arguments
616 `(#:tests? #f)) ; tests expect a running MySQL
617 (propagated-inputs
618 `(("python-cli-helpers" ,python-cli-helpers)
619 ("python-click" ,python-click)
620 ("python-configobj" ,python-configobj)
621 ("python-cryptography" ,python-cryptography)
622 ("python-prompt-toolkit" ,python-prompt-toolkit)
623 ("python-pygments" ,python-pygments)
624 ("python-pymysql" ,python-pymysql)
625 ("python-sqlparse" ,python-sqlparse)))
626 (home-page "http://mycli.net")
627 (synopsis
628 "Terminal Client for MySQL with AutoCompletion and Syntax Highlighting")
629 (description
630 "MyCLI is a command line interface for MySQL, MariaDB, and Percona with
631auto-completion and syntax highlighting.")
632 (license license:bsd-3)))
633
7cbf06d8
TGR
634;; XXX When updating, check whether boost-for-mysql is still needed.
635;; It might suffice to patch ‘cmake/boost.cmake’ as done in the past.
5f96f303
LC
636(define-public mysql
637 (package
638 (name "mysql")
fdf82830 639 (version "5.7.33")
5f96f303
LC
640 (source (origin
641 (method url-fetch)
23bbd7dd 642 (uri (list (string-append
7fe3a57a 643 "https://dev.mysql.com/get/Downloads/MySQL-"
23bbd7dd
EF
644 (version-major+minor version) "/"
645 name "-" version ".tar.gz")
646 (string-append
7fe3a57a 647 "https://downloads.mysql.com/archives/get/file/"
23bbd7dd 648 name "-" version ".tar.gz")))
5f96f303
LC
649 (sha256
650 (base32
fdf82830 651 "1bb343mf7n0qg2qz497gxjsqprygrjz1q1pbz76hgqxnsy08sfxd"))))
329d13b8
SB
652 (build-system cmake-build-system)
653 (arguments
69419655 654 `(#:configure-flags
329d13b8
SB
655 '("-DBUILD_CONFIG=mysql_release"
656 "-DWITH_SSL=system"
657 "-DWITH_ZLIB=system"
658 "-DDEFAULT_CHARSET=utf8"
659 "-DDEFAULT_COLLATION=utf8_general_ci"
660 "-DMYSQL_DATADIR=/var/lib/mysql"
661 "-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock"
662 "-DINSTALL_INFODIR=share/mysql/docs"
663 "-DINSTALL_MANDIR=share/man"
664 "-DINSTALL_PLUGINDIR=lib/mysql/plugin"
665 "-DINSTALL_SCRIPTDIR=bin"
666 "-DINSTALL_INCLUDEDIR=include/mysql"
667 "-DINSTALL_DOCREADMEDIR=share/mysql/docs"
668 "-DINSTALL_SUPPORTFILESDIR=share/mysql"
669 "-DINSTALL_MYSQLSHAREDIR=share/mysql"
670 "-DINSTALL_DOCDIR=share/mysql/docs"
671 "-DINSTALL_SHAREDIR=share/mysql"
672 ;; Get rid of test data.
673 "-DINSTALL_MYSQLTESTDIR="
3f289db6
LC
674 "-DINSTALL_SQLBENCHDIR=")
675 #:phases (modify-phases %standard-phases
6a52df50
LC
676 (add-after
677 'install 'remove-extra-binaries
678 (lambda* (#:key outputs #:allow-other-keys)
679 (let ((out (assoc-ref outputs "out")))
680 ;; Remove the 3 *_embedded files, which weigh in at
681 ;; 14 MiB each.
682 (for-each delete-file
683 (find-files (string-append out "/bin")
684 "_embedded$"))
7d099cbe 685 #t))))))
329d13b8
SB
686 (native-inputs
687 `(("bison" ,bison)
aace6f6d
EF
688 ("perl" ,perl)
689 ("pkg-config" ,pkg-config)))
5f96f303 690 (inputs
7cbf06d8 691 `(("boost" ,boost-for-mysql)
23bbd7dd 692 ("libaio" ,libaio)
aace6f6d 693 ("libtirpc" ,libtirpc)
23bbd7dd 694 ("ncurses" ,ncurses)
5f96f303 695 ("openssl" ,openssl)
aace6f6d 696 ("rpcsvc-proto" ,rpcsvc-proto) ; rpcgen
23bbd7dd 697 ("zlib" ,zlib)))
7fe3a57a 698 (home-page "https://www.mysql.com/")
9e771e3b 699 (synopsis "Fast, easy to use, and popular database")
5f96f303
LC
700 (description
701 "MySQL is a fast, reliable, and easy to use relational database
702management system that supports the standardized Structured Query
703Language.")
ba8b9f8d 704 (license license:gpl2)))
5f96f303 705
77631745
SB
706(define-public mariadb
707 (package
708 (name "mariadb")
ce29031a 709 (version "10.5.8")
77631745
SB
710 (source (origin
711 (method url-fetch)
cc3c5fc5
MB
712 (uri (string-append "https://downloads.mariadb.com/MariaDB"
713 "/mariadb-" version "/source/mariadb-"
714 version ".tar.gz"))
77631745
SB
715 (sha256
716 (base32
ce29031a 717 "1s3vfm73911cddjhgpcbkya6nz7ag2zygg56qqzwscn5ybv28j7b"))
2001d2da
MB
718 (modules '((guix build utils)))
719 (snippet
720 '(begin
721 ;; Delete bundled snappy and xz.
722 (delete-file-recursively "storage/tokudb/PerconaFT/third_party")
4333d48a
MB
723 (substitute* "storage/tokudb/PerconaFT/CMakeLists.txt"
724 ;; This file checks that the bundled sources are present and
725 ;; declares build procedures for them.
726 (("^include\\(TokuThirdParty\\)") ""))
727 (substitute* "storage/tokudb/PerconaFT/ft/CMakeLists.txt"
728 ;; Don't attempt to use the procedures we just removed.
729 ((" build_lzma build_snappy") ""))
2001d2da
MB
730
731 ;; Preserve CMakeLists.txt for these.
732 (for-each (lambda (file)
733 (unless (string-suffix? "CMakeLists.txt" file)
734 (delete-file file)))
525ebb85
MB
735 (append (find-files "extra/wolfssl")
736 (find-files "zlib")))
2001d2da 737 #t))))
52c8d07a 738 (replacement mariadb/fixed)
77631745 739 (build-system cmake-build-system)
2b8491fb 740 (outputs '("out" "lib" "dev"))
77631745 741 (arguments
5193ae64 742 `(#:configure-flags
2b8491fb
JL
743 (list
744 "-DBUILD_CONFIG=mysql_release"
6cf8e576
LF
745 ;; Linking with libarchive fails, like this:
746
747 ;; ld: /gnu/store/...-libarchive-3.2.2/lib/libarchive.a(archive_entry.o):
748 ;; relocation R_X86_64_32 against `.bss' can not be used when
749 ;; making a shared object; recompile with -fPIC
750
751 ;; For now, disable the features that that use libarchive (xtrabackup).
752 "-DWITH_LIBARCHIVE=OFF"
753
bba7a77e
MB
754 ;; Disable the TokuDB engine, because its test suite frequently fails,
755 ;; and loading it crashes the server: <https://bugs.gnu.org/35521>.
756 "-DTOKUDB_OK=OFF"
757
2001d2da
MB
758 ;; Ensure the system libraries are used.
759 "-DWITH_JEMALLOC=yes"
760 "-DWITH_PCRE=system"
761 "-DWITH_SSL=system"
762 "-DWITH_ZLIB=system"
763
77631745
SB
764 "-DDEFAULT_CHARSET=utf8"
765 "-DDEFAULT_COLLATION=utf8_general_ci"
766 "-DMYSQL_DATADIR=/var/lib/mysql"
767 "-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock"
ce29031a 768
704b7861 769 ;; Do not install the benchmark suite.
ce29031a
MB
770 "-DINSTALL_SQLBENCHDIR=false"
771
2b8491fb
JL
772 (string-append "-DCMAKE_INSTALL_PREFIX=" (assoc-ref %outputs "lib"))
773 (string-append "-DCMAKE_INSTALL_RPATH=" (assoc-ref %outputs "lib")
774 "/lib")
775 (string-append "-DINSTALL_INFODIR=" (assoc-ref %outputs "out")
776 "/share/mysql/docs")
777 (string-append "-DINSTALL_MANDIR=" (assoc-ref %outputs "out")
778 "/share/man")
779 (string-append "-DINSTALL_SCRIPTDIR=" (assoc-ref %outputs "out") "/bin")
780 (string-append "-DINSTALL_BINDIR=" (assoc-ref %outputs "out") "/bin")
781 "-DCMAKE_INSTALL_LIBDIR=lib"
77631745 782 "-DINSTALL_PLUGINDIR=lib/mysql/plugin"
2b8491fb
JL
783 (string-append "-DINSTALL_INCLUDEDIR=" (assoc-ref %outputs "dev")
784 "/include/mysql")
785 (string-append "-DINSTALL_DOCREADMEDIR=" (assoc-ref %outputs "out")
786 "/share/mysql/docs")
787 (string-append "-DINSTALL_DOCDIR=" (assoc-ref %outputs "out")
788 "/share/mysql/docs")
789 (string-append "-DINSTALL_SUPPORTFILESDIR=" (assoc-ref %outputs "out")
790 "/share/mysql/support-files")
77631745 791 "-DINSTALL_MYSQLSHAREDIR=share/mysql"
4c27ea06 792 "-DINSTALL_SHAREDIR=share")
77631745
SB
793 #:phases
794 (modify-phases %standard-phases
525ebb85 795 (add-after 'unpack 'adjust-output-references
2001d2da 796 (lambda _
525ebb85
MB
797 ;; The build system invariably prepends $CMAKE_INSTALL_PREFIX
798 ;; to other variables such as $INSTALL_INCLUDEDIR, which does
799 ;; not work when the latter uses an absolute file name.
800 (substitute* "libmariadb/mariadb_config/mariadb_config.c.in"
704b7861
MB
801 (("%s/@INSTALL_INCLUDEDIR@")
802 (string-append "@INSTALL_INCLUDEDIR@"))
803 ;; As of 10.5.8, the mariadb_config program tries to be
804 ;; clever and computes the installation directory relative
805 ;; to /proc/self/exe when running on Linux. Make it fall
806 ;; back to the old behaviour.
807 (("defined\\(__linux__\\)")
808 "0"))
525ebb85
MB
809 (substitute* "libmariadb/mariadb_config/libmariadb.pc.in"
810 (("\\$\\{prefix\\}/@INSTALL_INCLUDEDIR@")
811 "@INSTALL_INCLUDEDIR@"))
704b7861
MB
812 (substitute* "support-files/mariadb.pc.in"
813 (("^(include|bin|script|doc|man)dir=\\$\\{prefix\\}/" _ dir)
814 (string-append dir "dir=")))
525ebb85
MB
815 (substitute* "include/CMakeLists.txt"
816 (("\\\\\\$\\{CMAKE_INSTALL_PREFIX\\}/\\$\\{INSTALL_INCLUDEDIR\\}")
817 "${INSTALL_INCLUDEDIR}"))
704b7861
MB
818 (substitute* "cmake/mariadb_connector_c.cmake"
819 (("\\\\\\$\\{CMAKE_INSTALL_PREFIX\\}/\\$\\{INSTALL_BINDIR\\}")
820 "${INSTALL_BINDIR}"))
2001d2da 821 #t))
3869f39e
MB
822 (add-after 'unpack 'adjust-tests
823 (lambda _
824 (let ((disabled-tests
825 '(;; These fail because root@hostname == root@localhost in
826 ;; the build environment, causing a user count mismatch.
827 ;; See <https://jira.mariadb.org/browse/MDEV-7761>.
525ebb85 828 "funcs_1.is_columns_mysql"
3869f39e
MB
829 "main.join_cache"
830 "main.explain_non_select"
e313327e 831 "main.stat_tables"
1d957c79 832 "main.stat_tables_innodb"
ce29031a 833 "main.upgrade_MDEV-19650"
3418e43b 834 "roles.acl_statistics"
69fb26d4 835
ce29031a
MB
836 ;; FIXME: This test checks various table encodings and
837 ;; fails because Guix defaults to UTF8 instead of the
838 ;; upstream default latin1_swedish_ci. It's not easily
839 ;; substitutable because several encodings are tested.
840 "main.sp2"
841
166472e2
MB
842 ;; XXX: This test occasionally fails on i686-linux:
843 ;; <https://jira.mariadb.org/browse/MDEV-24458>
844 ,@(if (string-prefix? "i686" (%current-system))
845 '("main.myisampack")
846 '())
847
69fb26d4 848 ;; This file contains a time bomb which makes it fail after
0ce64334 849 ;; 2030-12-31. See <https://bugs.gnu.org/34351> for details.
525ebb85 850 "main.mysqldump"))
3869f39e
MB
851
852 ;; This file contains a list of known-flaky tests for this
853 ;; release. Append our own items.
854 (unstable-tests (open-file "mysql-test/unstable-tests" "a")))
855 (for-each (lambda (test)
856 (format unstable-tests "~a : ~a\n"
857 test "Disabled in Guix"))
858 disabled-tests)
859 (close-port unstable-tests)
860
525ebb85 861 ;; XXX: These fail because they expect a latin1 charset and
ab0cb26f 862 ;; collation. See <https://jira.mariadb.org/browse/MDEV-21264>.
525ebb85
MB
863 (substitute* '("mysql-test/main/gis_notembedded.result"
864 "mysql-test/main/system_mysql_db.result")
ab0cb26f
MB
865 (("latin1_swedish_ci") "utf8_general_ci")
866 (("\tlatin1") "\tutf8"))
867
e313327e
MB
868 (substitute* "mysql-test/suite/binlog/t/binlog_mysqlbinlog_stop_never.test"
869 (("/bin/bash")
870 (which "bash")))
871
3869f39e
MB
872 (substitute* "mysql-test/mysql-test-run.pl"
873 (("/bin/ls") (which "ls"))
874 (("/bin/sh") (which "sh")))
875 #t)))
5b4d2e40
MB
876 (add-before 'configure 'disable-plugins
877 (lambda _
878 (let ((disable-plugin (lambda (name)
879 (call-with-output-file
880 (string-append "plugin/" name
881 "/CMakeLists.txt")
882 (lambda (port)
883 (format port "\n")))))
03335824 884 (disabled-plugins '(;; XXX: Causes a test failure.
3869f39e 885 "disks")))
5b4d2e40
MB
886 (for-each disable-plugin disabled-plugins)
887 #t)))
3869f39e
MB
888 (replace 'check
889 (lambda* (#:key (tests? #t) #:allow-other-keys)
890 (if tests?
891 (with-directory-excursion "mysql-test"
892 (invoke "./mtr" "--verbose"
3418e43b 893 "--retry=3"
71179b35
MB
894 "--testcase-timeout=40"
895 "--suite-timeout=600"
3869f39e 896 "--parallel" (number->string (parallel-job-count))
b2bb04bd
MB
897 ;; Skip the replication tests: they are very I/O
898 ;; intensive and frequently causes indeterministic
899 ;; failures even on powerful hardware.
900 "--skip-rpl"
3869f39e
MB
901 "--skip-test-list=unstable-tests"))
902 (format #t "test suite not run~%"))
903 #t))
77631745
SB
904 (add-after
905 'install 'post-install
939c5b2c 906 (lambda* (#:key inputs outputs #:allow-other-keys)
77631745 907 (let* ((out (assoc-ref outputs "out"))
2b8491fb 908 (dev (assoc-ref outputs "dev"))
939c5b2c
MB
909 (lib (assoc-ref outputs "lib"))
910 (openssl (assoc-ref inputs "openssl")))
525ebb85
MB
911 (substitute* (list (string-append out "/bin/mariadb-install-db")
912 (string-append out "/bin/mysql_install_db"))
77631745 913 (("basedir=\"\"")
525ebb85
MB
914 (string-append "basedir=\"" out "\""))
915 (("\\$basedir/share/mysql")
916 (string-append lib "/share/mysql")))
917
2b8491fb 918 (with-directory-excursion lib
704b7861
MB
919 ;; Remove tests.
920 (delete-file-recursively "mysql-test")
ce29031a 921 ;; Remove static libraries.
963157f1 922 (for-each delete-file (find-files "lib" "\\.a$")))
ce29031a 923
2b8491fb
JL
924 (with-directory-excursion out
925 (delete-file "share/man/man1/mysql-test-run.pl.1")
926 ;; Delete huge and unnecessary executables.
525ebb85 927 (for-each delete-file (find-files "bin" "test$")))
2b8491fb
JL
928 (mkdir-p (string-append dev "/share"))
929 (mkdir-p (string-append dev "/bin"))
525ebb85
MB
930 (rename-file (string-append lib "/bin/mariadbd")
931 (string-append out "/bin/mariadbd"))
2b8491fb
JL
932 (rename-file (string-append lib "/bin/mysqld")
933 (string-append out "/bin/mysqld"))
525ebb85
MB
934 (mkdir-p (string-append dev "/lib"))
935 (rename-file (string-append lib "/lib/pkgconfig")
936 (string-append dev "/lib/pkgconfig"))
937 (rename-file (string-append lib "/bin/mariadb_config")
938 (string-append dev "/bin/mariadb_config"))
2b8491fb
JL
939 (rename-file (string-append out "/bin/mysql_config")
940 (string-append dev "/bin/mysql_config"))
939c5b2c
MB
941
942 ;; Embed an absolute reference to OpenSSL in mysql_config
943 ;; and the pkg-config file to avoid propagation.
525ebb85 944 ;; XXX: how to do this for mariadb_config.c.in?
939c5b2c 945 (substitute* (list (string-append dev "/bin/mysql_config")
525ebb85 946 (string-append dev "/lib/pkgconfig/mariadb.pc"))
939c5b2c
MB
947 (("-lssl -lcrypto" all)
948 (string-append "-L" openssl "/lib " all)))
949
841ee2a8 950 #t))))))
77631745
SB
951 (native-inputs
952 `(("bison" ,bison)
03335824 953 ("perl" ,perl)))
77631745
SB
954 (inputs
955 `(("jemalloc" ,jemalloc)
956 ("libaio" ,libaio)
957 ("libxml2" ,libxml2)
958 ("ncurses" ,ncurses)
525ebb85 959 ("openssl" ,openssl)
ab0cb26f 960 ("pam" ,linux-pam)
525ebb85 961 ("pcre2" ,pcre2)
2001d2da 962 ("xz" ,xz)
77631745 963 ("zlib" ,zlib)))
3869f39e
MB
964 ;; The test suite is very resource intensive and can take more than three
965 ;; hours on a x86_64 system. Give slow and busy machines some leeway.
966 (properties '((timeout . 64800))) ;18 hours
77631745
SB
967 (home-page "https://mariadb.org/")
968 (synopsis "SQL database server")
969 (description
970 "MariaDB is a multi-user and multi-threaded SQL database server, designed
971as a drop-in replacement of MySQL.")
ba8b9f8d 972 (license license:gpl2)))
77631745 973
52c8d07a
LLB
974(define mariadb/fixed
975 (package
976 (inherit mariadb)
977 (source (origin
978 (inherit (package-source mariadb))
979 (patches (search-patches "mariadb-CVE-2021-27928.patch"))))))
980
2072bc08
PN
981(define-public mariadb-connector-c
982 (package
983 (name "mariadb-connector-c")
51059be3 984 (version "3.1.12")
3881d0dc
TGR
985 (source
986 (origin
987 (method url-fetch)
988 (uri (string-append
989 "https://downloads.mariadb.org/f/connector-c-" version
990 "/mariadb-connector-c-" version "-src.tar.gz"
991 "/from/https%3A//mirrors.ukfast.co.uk/sites/mariadb/?serve"))
f6a94e7e 992 (file-name (string-append name "-" version ".tar.gz"))
3881d0dc 993 (sha256
51059be3 994 (base32 "0qzyahr8x9l1xz0l79wz3iahxz7648n1azc5yr7kx0dl113y2nig"))))
9077cf68 995 (inputs
2072bc08
PN
996 `(("openssl" ,openssl)))
997 (build-system cmake-build-system)
9077cf68 998 (arguments
87078871 999 '(#:tests? #f)) ; no tests
2072bc08
PN
1000 (home-page "https://mariadb.com/kb/en/mariadb-connector-c/")
1001 (synopsis "Client library to connect to MySQL or MariaDB")
1002 (description "The MariaDB Connector/C is used to connect applications
1003developed in C/C++ to MariaDB and MySQL databases.")
1004 (license license:lgpl2.1+)))
9077cf68 1005
43c55856 1006(define-public galera
1007 (package
1008 (name "galera")
1009 (version "26.4.7")
1010 (source (origin
1011 (method git-fetch)
1012 (uri (git-reference
1013 (commit "bac8171266cb982fe013ce496d78085438c6f23e")
1014 (url "https://github.com/codership/galera")
1015 (recursive? #t)))
1016 (file-name (git-file-name name version))
1017 (sha256
1018 (base32 "0h7s670pcasq8wzprhyxqfca2cghi62b8xz2kikb2a86wd453qil"))))
1019 (build-system cmake-build-system)
1020 (inputs
1021 `(("check" ,check)
1022 ("boost" ,boost)
1023 ("openssl" ,openssl)))
1024 (home-page "https://github.com/codership/galera/")
1025 (synopsis "Extension to the MariaDB database server")
1026 (description
1027 "Galera is a wsrep-provider that is used with MariaDB for load-balancing
1028and high-availability (HA).")
1029 (license license:gpl2))) ;'COPYING' says "version 2" only
1030
97dd1b15 1031;; Don't forget to update the other postgresql packages when upgrading this one.
a73302ec 1032(define-public postgresql-13
5f96f303
LC
1033 (package
1034 (name "postgresql")
392e230d 1035 (replacement postgresql-13.2)
a73302ec 1036 (version "13.1")
5f96f303
LC
1037 (source (origin
1038 (method url-fetch)
dbeaf8f2 1039 (uri (string-append "https://ftp.postgresql.org/pub/source/v"
9020890b 1040 version "/postgresql-" version ".tar.bz2"))
5f96f303
LC
1041 (sha256
1042 (base32
a73302ec 1043 "07z6zwr58dckaa97yl9ml240z83d1lhgaxw9aq49i8lsp21mqd0j"))
c336567d 1044 (patches (search-patches "postgresql-disable-resolve_symlinks.patch"))))
5f96f303 1045 (build-system gnu-build-system)
dd213082 1046 (arguments
e693617f
MB
1047 `(#:configure-flags '("--with-uuid=e2fs" "--with-openssl"
1048 ;; PostgreSQL installs its own Makefile (should it?).
1049 ;; Prevent it from retaining needless references to
1050 ;; the build tools in order to save size.
1051 "MKDIR_P=mkdir -p" "INSTALL_BIN=install -c"
1052 "LD=ld" "TAR=tar")
b7aa3f5d 1053 #:phases
dd213082
JD
1054 (modify-phases %standard-phases
1055 (add-before 'configure 'patch-/bin/sh
1056 (lambda _
1057 ;; Refer to the actual shell.
1058 (substitute* '("src/bin/pg_ctl/pg_ctl.c"
1059 "src/bin/psql/command.c")
1060 (("/bin/sh") (which "sh")))
b7aa3f5d
DM
1061 #t))
1062 (add-after 'build 'build-contrib
1063 (lambda _
1fbad3ad 1064 (invoke "make" "-C" "contrib")))
b7aa3f5d
DM
1065 (add-after 'install 'install-contrib
1066 (lambda _
1fbad3ad 1067 (invoke "make" "-C" "contrib" "install"))))))
5f96f303
LC
1068 (inputs
1069 `(("readline" ,readline)
bb93042c 1070 ("libuuid" ,util-linux "lib")
8b7e6d00 1071 ("openssl" ,openssl)
5f96f303 1072 ("zlib" ,zlib)))
d887f420 1073 (home-page "https://www.postgresql.org/")
5f96f303
LC
1074 (synopsis "Powerful object-relational database system")
1075 (description
1076 "PostgreSQL is a powerful object-relational database system. It is fully
1077ACID compliant, has full support for foreign keys, joins, views, triggers, and
1078stored procedures (in multiple languages). It includes most SQL:2008 data
1079types, including INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL, and
1080TIMESTAMP. It also supports storage of binary large objects, including
1081pictures, sounds, or video.")
ba8b9f8d 1082 (license (license:x11-style "file://COPYRIGHT"))))
5f96f303 1083
392e230d
LLB
1084(define-public postgresql-13.2
1085 (package
1086 (inherit postgresql-13)
1087 (name "postgresql")
1088 (version "13.2")
1089 (source (origin
1090 (method url-fetch)
1091 (uri (string-append "https://ftp.postgresql.org/pub/source/v"
1092 version "/postgresql-" version ".tar.bz2"))
1093 (sha256
1094 (base32
1095 "1z5d847jnajcfr3wa6jn52a8xjhamvwzmz18xlm5nvxqip8grmsz"))
1096 (patches (search-patches "postgresql-disable-resolve_symlinks.patch"))))))
1097
a73302ec 1098(define-public postgresql-11
ddeec8ca 1099 (package
a73302ec
MB
1100 (inherit postgresql-13)
1101 (name "postgresql")
812f0d69 1102 (version "11.11")
ddeec8ca 1103 (source (origin
a73302ec 1104 (inherit (package-source postgresql-13))
ddeec8ca
MB
1105 (uri (string-append "https://ftp.postgresql.org/pub/source/v"
1106 version "/postgresql-" version ".tar.bz2"))
1107 (sha256
1108 (base32
812f0d69 1109 "0v0qk298nxmpzpgsxcsxma328hdkyzd7fwjs0zsn6zavl5zpnq20"))))))
ddeec8ca 1110
a73302ec 1111(define-public postgresql-10
91477def 1112 (package
a73302ec 1113 (inherit postgresql-11)
e55812e6 1114 (version "10.16")
91477def 1115 (source (origin
a73302ec 1116 (inherit (package-source postgresql-11))
91477def
GB
1117 (uri (string-append "https://ftp.postgresql.org/pub/source/v"
1118 version "/postgresql-" version ".tar.bz2"))
1119 (sha256
1120 (base32
e55812e6 1121 "1cvv8qw0gkkczqhiwx6ns7w88dwkvdz4cvb2d4ff14363f5p2p53"))))))
91477def 1122
7658d89b
EF
1123(define-public postgresql-9.6
1124 (package
a73302ec 1125 (inherit postgresql-10)
6941dbf9 1126 (version "9.6.21")
7658d89b 1127 (source (origin
a73302ec 1128 (inherit (package-source postgresql-10))
7658d89b
EF
1129 (uri (string-append "https://ftp.postgresql.org/pub/source/v"
1130 version "/postgresql-" version ".tar.bz2"))
1131 (sha256
1132 (base32
6941dbf9 1133 "0d0ngpadf1i7c0i2psaxcbmiwx8334ibcsn283n9fp4853pyl3wk"))))))
7658d89b 1134
a73302ec
MB
1135(define-public postgresql postgresql-13)
1136
100a4f84
SH
1137(define-public pgloader
1138 (package
1139 (name "pgloader")
1140 (version "3.6.2")
1141 (source
1142 (origin
1143 (method git-fetch)
1144 (uri (git-reference
1145 (url "https://github.com/dimitri/pgloader")
1146 (commit (string-append "v" version))))
1147 (sha256
1148 (base32 "06i1jd2za3ih5caj2b4vzlzags5j65vv8dfdbz0ggdrp40wfd5lh"))
1149 (file-name (git-file-name name version))))
1150 (build-system gnu-build-system)
1151 (arguments
1152 ;; NOTE: (Sharlatan-20210119T211511+0000) Tests are disabled due to being
1153 ;; dependent on Quicklisp, main build target is `pgloader-standalone' which
1154 ;; does not require Quicklisp workarounds. There is no `install' target
1155 ;; configured in Makefile.
1156 `(#:tests? #f
1157 #:strip-binaries? #f
1158 #:make-flags
1159 (list "pgloader-standalone" "BUILDAPP_SBCL=buildapp")
1160 #:phases
1161 (modify-phases %standard-phases
1162 (delete 'configure)
1163 (add-after 'unpack 'set-home
1164 (lambda _
1165 (setenv "HOME" "/tmp")
1166 #t))
1167 (add-after 'unpack 'patch-Makefile
1168 (lambda _
1169 (substitute* "Makefile"
1170 (("--sbcl.*") "--sbcl $(CL) --asdf-path . \\\n"))
1171 #t))
1172 (replace 'install
1173 (lambda* (#:key outputs #:allow-other-keys)
1174 (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
1175 (mkdir-p bin)
1176 (install-file "build/bin/pgloader" bin))
1177 #t)))))
1178 (native-inputs
1179 `(("buildapp" ,buildapp)
1180 ("sbcl" ,sbcl)))
1181 (inputs
1182 `(("alexandria" ,sbcl-alexandria)
1183 ("cl-abnf" ,sbcl-cl-abnf)
1184 ("cl-base64" ,sbcl-cl-base64)
1185 ("cl-csv" ,sbcl-cl-csv)
1186 ("cl-fad" ,sbcl-cl-fad)
1187 ("cl-log" ,sbcl-cl-log)
1188 ("cl-markdown" ,sbcl-cl-markdown)
1189 ("cl-mustache" ,sbcl-cl-mustache)
1190 ("cl-ppcre" ,sbcl-cl-ppcre)
1191 ("cl-sqlite" ,sbcl-cl-sqlite)
1192 ("closer-mop" ,sbcl-closer-mop)
1193 ("command-line-arguments" ,sbcl-command-line-arguments)
1194 ("db3" ,sbcl-db3)
1195 ("drakma" ,sbcl-drakma)
1196 ("esrap" ,sbcl-esrap)
1197 ("flexi-streams" ,sbcl-flexi-streams)
1198 ("ixf" ,sbcl-ixf)
1199 ("local-time" ,sbcl-local-time)
1200 ("lparallel" ,sbcl-lparallel)
1201 ("metabang-bind" ,sbcl-metabang-bind)
1202 ("mssql" ,sbcl-mssql)
1203 ("postmodern" ,sbcl-postmodern)
1204 ("py-configparser" ,sbcl-py-configparser)
1205 ("qmynd" ,sbcl-qmynd)
1206 ("quri" ,sbcl-quri)
1207 ("split-sequence" ,sbcl-split-sequence)
1208 ("trivial-backtrace" ,sbcl-trivial-backtrace)
1209 ("usocket" ,sbcl-usocket)
1210 ("uuid" ,sbcl-uuid)
1211 ("yason" ,sbcl-yason)
1212 ("zs3" ,sbcl-zs3)))
1213 (home-page "https://pgloader.io/")
1214 (synopsis "Tool to migrate data to PostgreSQL")
1215 (description
1216 "@code{pgloader} is a program that can load data or migrate databases from
1217CSV, DB3, iXF, SQLite, MS-SQL or MySQL to PostgreSQL.")
1218 (license (license:x11-style "file://LICENSE"))))
1219
9763102b
TGR
1220(define-public python-pymysql
1221 (package
1222 (name "python-pymysql")
4cb2f29e 1223 (version "0.9.3")
9763102b
TGR
1224 (source
1225 (origin
1226 (method url-fetch)
1227 (uri (pypi-uri "PyMySQL" version))
1228 (sha256
4cb2f29e 1229 (base32 "1ry8lxgdc1p3k7gbw20r405jqi5lvhi5wk83kxdbiv8xv3f5kh6q"))))
9763102b
TGR
1230 (build-system python-build-system)
1231 (native-inputs
1232 `(("python-unittest2" ,python-unittest2)))
1233 (inputs
1234 `(("python-cryptography" ,python-cryptography)))
1235 (arguments
1236 `(#:tests? #f)) ; tests expect a running MySQL
1237 (home-page "https://github.com/PyMySQL/PyMySQL/")
1238 (synopsis "Pure-Python MySQL driver")
1239 (description
1240 "PyMySQL is a pure-Python MySQL client library, based on PEP 249.
1241Most public APIs are compatible with @command{mysqlclient} and MySQLdb.")
1242 (license license:expat)))
1243
1244(define-public python2-pymysql
1245 (package-with-python2 python-pymysql))
1246
259a94e9
TD
1247(define-public qdbm
1248 (package
1249 (name "qdbm")
1250 (version "1.8.78")
1251 (source
1252 (origin
1253 (method url-fetch)
1254 (uri (string-append "http://fallabs.com/" name "/"
1255 name "-" version ".tar.gz"))
1256 (sha256
1257 (base32
1258 "0gmpvhn02pkq280ffmn4da1g4mdr1xxz7l80b7y4n7km1mrzwrml"))))
1259 (build-system gnu-build-system)
1260 (arguments
7dc0f1d5
TD
1261 `(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
1262 (assoc-ref %outputs "out")
1263 "/lib"))
1264 #:make-flags (list "CFLAGS=-fPIC")))
d74647b0 1265 (home-page "https://fallabs.com/qdbm/")
259a94e9
TD
1266 (synopsis "Key-value database")
1267 (description "QDBM is a library of routines for managing a
1268database. The database is a simple data file containing key-value
1269pairs. Every key and value is serial bytes with variable length.
1270Binary data as well as character strings can be used as a key or a
1271value. There is no concept of data tables or data types. Records are
1272organized in a hash table or B+ tree.")
1273 (license license:lgpl2.1+)))
1274
5f96f303
LC
1275(define-public recutils
1276 (package
1277 (name "recutils")
c007e35d 1278 (version "1.8")
5f96f303
LC
1279 (source (origin
1280 (method url-fetch)
1281 (uri (string-append "mirror://gnu/recutils/recutils-"
1282 version ".tar.gz"))
1283 (sha256
1284 (base32
c007e35d 1285 "14xiln4immfsw8isnvwvq0h23f6z0wilpgsc4qzabnrzb5lsx3nz"))))
5f96f303
LC
1286 (build-system gnu-build-system)
1287
c007e35d 1288 (arguments '(#:configure-flags
b747a9db
LF
1289 (list (string-append "--with-bash-headers="
1290 (assoc-ref %build-inputs "bash:include")
c007e35d 1291 "/include/bash"))))
5f96f303 1292
535a69e9 1293 (native-inputs `(("bc" ,bc)
b747a9db 1294 ("bash:include" ,bash "include")
e1409c76 1295 ("check" ,check-0.14)
c007e35d 1296 ("pkg-config" ,pkg-config)))
5f96f303
LC
1297
1298 ;; TODO: Add more optional inputs.
5f96f303 1299 (inputs `(("curl" ,curl)
23526b67
JS
1300 ("libgcrypt" ,libgcrypt)
1301 ("libuuid" ,util-linux "lib")))
5f96f303
LC
1302 (synopsis "Manipulate plain text files as databases")
1303 (description
1304 "GNU Recutils is a set of tools and libraries for creating and
1305manipulating text-based, human-editable databases. Despite being text-based,
1306databases created with Recutils carry all of the expected features such as
c5779c93
LC
1307unique fields, primary keys, time stamps and more. Many different field
1308types are supported, as is encryption.")
ba8b9f8d 1309 (license license:gpl3+)
6fd52309 1310 (home-page "https://www.gnu.org/software/recutils/")))
5f96f303 1311
9df78675
JH
1312(define-public emacs-recutils
1313 (package
1314 (inherit recutils)
1315 (name "emacs-recutils")
1316 (build-system emacs-build-system)
1317 (arguments
1318 '(#:phases
1319 (modify-phases %standard-phases
1320 (add-after 'unpack 'change-directory
1321 (lambda _
1322 (chdir "etc")
1323 #t)))))
1324 (native-inputs '())
1325 (inputs '())
1326 (synopsis "Emacs mode for working with recutils database files")
1327 (description "This package provides an Emacs major mode @code{rec-mode}
1328for working with GNU Recutils text-based, human-editable databases. It
1329supports editing, navigation, and querying of recutils database files
1330including field and record folding.")))
1331
d3c6ad0a
MB
1332(define-public rocksdb
1333 (package
1334 (name "rocksdb")
6a0f9c87 1335 (version "6.11.4")
d3c6ad0a 1336 (source (origin
8dd36658
MB
1337 (method git-fetch)
1338 (uri (git-reference
1339 (url "https://github.com/facebook/rocksdb")
1340 (commit (string-append "v" version))))
1341 (file-name (git-file-name name version))
d3c6ad0a
MB
1342 (sha256
1343 (base32
6a0f9c87 1344 "0n19p9cd13jg0lnibrzwkxs4xlrhyj3knypkd2ic41arbds0bdnl"))
d3c6ad0a
MB
1345 (modules '((guix build utils)))
1346 (snippet
1347 '(begin
1348 ;; TODO: unbundle gtest.
1349 (delete-file "build_tools/gnu_parallel")
7fa9cca8
MB
1350 (substitute* "Makefile"
1351 (("build_tools/gnu_parallel") "parallel"))
d3c6ad0a
MB
1352 #t))))
1353 (build-system gnu-build-system)
1354 (arguments
7fa9cca8
MB
1355 `(#:make-flags (list "CC=gcc" "V=1"
1356 ;; Ceph requires that RTTI is enabled.
1357 "USE_RTTI=1"
115cd74d 1358 "date=1970-01-01" ; build reproducibly
d3c6ad0a 1359 (string-append "INSTALL_PATH="
7fa9cca8
MB
1360 (assoc-ref %outputs "out"))
1361
1362 ;; Running the full test suite takes hours and require
1363 ;; a lot of disk space. Instead we only run a subset
1364 ;; (see .travis.yml and Makefile).
1365 "ROCKSDBTESTS_END=db_tailing_iter_test")
1366 #:test-target "check_some"
d7b344c5
MB
1367 ;; Many tests fail on 32-bit platforms. There are multiple reports about
1368 ;; this upstream, but it's not going to be supported any time soon.
1369 #:tests? (let ((system ,(or (%current-target-system)
1370 (%current-system))))
1371 (or (string-prefix? "x86_64-linux" system)
1372 (string-prefix? "aarch64-linux" system)))
d3c6ad0a
MB
1373 #:phases
1374 (modify-phases %standard-phases
1375 (add-after 'unpack 'patch-Makefile
1376 (lambda _
1377 (substitute* "Makefile"
f91c677c
MB
1378 ;; Don't depend on the static library when installing.
1379 (("install: install-static")
1380 "install: install-shared")
d3c6ad0a
MB
1381 (("#!/bin/sh") (string-append "#!" (which "sh"))))
1382 #t))
1383 (delete 'configure)
d7b344c5
MB
1384 ;; The default target is only needed for tests and built on demand.
1385 (delete 'build)
1386 (add-before 'check 'disable-optimizations
1387 (lambda _
1388 ;; Prevent the build from passing '-march=native' to the compiler.
1389 (setenv "PORTABLE" "1")
1390 #t))
d3c6ad0a
MB
1391 (add-before 'check 'disable-failing-tests
1392 (lambda _
1393 (substitute* "Makefile"
1394 ;; These tests reliably fail due to "Too many open files".
1395 (("^[[:blank:]]+env_test[[:blank:]]+\\\\") "\\")
1396 (("^[[:blank:]]+persistent_cache_test[[:blank:]]+\\\\") "\\"))
1397 #t))
7fa9cca8 1398 (add-after 'check 'build
f91c677c 1399 ;; The default build target is a debug build for tests. The
7fa9cca8
MB
1400 ;; install target depends on the "shared_lib" release target
1401 ;; so we build it here for clarity.
1402 (lambda* (#:key (make-flags '()) parallel-build? #:allow-other-keys)
1403 (apply invoke "make" "shared_lib"
1404 `(,@(if parallel-build?
1405 `("-j" ,(number->string (parallel-job-count)))
1406 '())
1407 ,@make-flags)))))))
d3c6ad0a
MB
1408 (native-inputs
1409 `(("parallel" ,parallel)
1410 ("perl" ,perl)
1411 ("procps" ,procps)
77e52190
MB
1412 ("python" ,python-2)
1413 ("which" ,which)))
d3c6ad0a
MB
1414 (inputs
1415 `(("bzip2" ,bzip2)
1416 ("gflags" ,gflags)
1417 ("jemalloc" ,jemalloc)
1418 ("lz4" ,lz4)
1419 ("snappy" ,snappy)
1420 ("zlib" ,zlib)))
0087a250 1421 (home-page "https://rocksdb.org/")
d3c6ad0a
MB
1422 (synopsis "Persistent key-value store for fast storage")
1423 (description
1424 "RocksDB is a library that forms the core building block for a fast
1425key-value server, especially suited for storing data on flash drives. It
1426has a @dfn{Log-Structured-Merge-Database} (LSM) design with flexible tradeoffs
1427between @dfn{Write-Amplification-Factor} (WAF), @dfn{Read-Amplification-Factor}
1428(RAF) and @dfn{Space-Amplification-Factor} (SAF). It has multi-threaded
1429compactions, making it specially suitable for storing multiple terabytes of
1430data in a single database. RocksDB is partially based on @code{LevelDB}.")
7fa9cca8
MB
1431 ;; RocksDB is dual licensed under GPL2 and ASL 2.0. Some header
1432 ;; files carry the 3-clause BSD license.
1433 (license (list license:gpl2 license:asl2.0 license:bsd-3))))
d3c6ad0a 1434
b92d02d9
RJ
1435(define-public sparql-query
1436 (package
1437 (name "sparql-query")
1438 (version "1.1")
1439 (source (origin
ce64b9d1
EF
1440 (method git-fetch)
1441 (uri (git-reference
1442 (url "https://github.com/tialaramex/sparql-query")
1443 (commit version)))
b92d02d9 1444 (sha256
ce64b9d1
EF
1445 (base32 "0a84a89idpjhj9w2y3fmvzv7ldps1cva1kxvfmh897k02kaniwxk"))
1446 (file-name (git-file-name name version))))
b92d02d9
RJ
1447 (build-system gnu-build-system)
1448 (inputs
6914eea0 1449 `(("curl" ,curl)
b92d02d9
RJ
1450 ("glib" ,glib)
1451 ("libxml2" ,libxml2)
6914eea0
EF
1452 ("ncurses" ,ncurses)
1453 ("readline" ,readline)))
b92d02d9
RJ
1454 (native-inputs
1455 `(("pkg-config" ,pkg-config)))
1456 (arguments
1457 `(#:make-flags '("CC=gcc")
1458 #:phases
1459 (modify-phases %standard-phases
1460 (delete 'configure)
1461 ;; The Makefile uses git to obtain versioning information. This phase
1462 ;; substitutes the git invocation with the package version.
1463 (add-after 'unpack 'remove-git-dependency
1464 (lambda _
1465 (substitute* "Makefile"
1466 (("^gitrev :=.*$")
96272e28
MW
1467 (string-append "gitrev = \"v" ,version "\"")))
1468 #t))
b92d02d9
RJ
1469 ;; The install phase of the Makefile assumes $PREFIX/usr/local/bin.
1470 ;; This replacement does the same thing, except for using $PREFIX/bin
1471 ;; instead.
1472 (replace 'install
1473 (lambda* (#:key outputs #:allow-other-keys)
1474 (let* ((out (assoc-ref outputs "out"))
1475 (bin (string-append out "/bin")))
1476 (install-file "sparql-query" bin)
96272e28
MW
1477 (symlink (string-append bin "/sparql-query")
1478 (string-append bin "/sparql-update")))
1479 #t))
b92d02d9
RJ
1480 (replace 'check
1481 (lambda* (#:key make-flags #:allow-other-keys)
96272e28
MW
1482 (apply invoke "make" `(,@make-flags "scan-test"))
1483 (invoke "./scan-test"))))))
b92d02d9
RJ
1484 (home-page "https://github.com/tialaramex/sparql-query/")
1485 (synopsis "Command-line tool for accessing SPARQL endpoints over HTTP")
1486 (description "Sparql-query is a command-line tool for accessing SPARQL
36a4366d 1487endpoints over HTTP. It has been intentionally designed to @code{feel} similar to
b92d02d9
RJ
1488tools for interrogating SQL databases. For example, you can enter a query over
1489several lines, using a semi-colon at the end of a line to indicate the end of
1490your query. It also supports readline so that you can more easily recall and
1491edit previous queries, even across sessions. It can be used non-interactively,
1492for example from a shell script.")
1493 ;; Some files (like scan-sparql.c) contain a GPLv3+ license header, while
1494 ;; others (like sparql-query.c) contain a GPLv2+ license header.
ba8b9f8d 1495 (license (list license:gpl3+))))
b92d02d9 1496
cabe8f18
CB
1497(define-public sqitch
1498 (package
1499 (name "sqitch")
adcad547 1500 (version "1.1.0")
cabe8f18
CB
1501 (source
1502 (origin
1503 (method url-fetch)
1504 (uri (string-append
f64cd5d1
TGR
1505 "mirror://cpan/authors/id/D/DW/DWHEELER/App-Sqitch-v"
1506 version ".tar.gz"))
cabe8f18 1507 (sha256
adcad547 1508 (base32 "1ayiwg9kh3w0nbacbcln7h944z94vq5vnnd5diz86033bpbnq57f"))))
cabe8f18
CB
1509 (build-system perl-build-system)
1510 (arguments
1511 '(#:phases
1512 (modify-phases %standard-phases
1513 (add-before 'check 'set-check-environment
1514 (lambda _
1515 (setenv "TZ" "UTC")
1516 (setenv "HOME" "/tmp")
1517 #t))
1518 (add-after 'install 'wrap-program
1519 (lambda* (#:key outputs #:allow-other-keys)
1520 (let* ((out (assoc-ref outputs "out"))
1521 (path (getenv "PERL5LIB")))
1522 (wrap-program (string-append out "/bin/sqitch")
1523 `("PERL5LIB" ":" prefix
1524 (,(string-append out "/lib/perl5/site_perl"
1525 ":"
1526 path)))))
1527 #t)))))
1528 (native-inputs
1529 `(("perl-capture-tiny" ,perl-capture-tiny)
1530 ("perl-io-pager" ,perl-io-pager)
1531 ("perl-module-build" ,perl-module-build)
1532 ("perl-module-runtime" ,perl-module-runtime)
1533 ("perl-path-class" ,perl-path-class)
1534 ("perl-test-deep" ,perl-test-deep)
1535 ("perl-test-dir" ,perl-test-dir)
1536 ("perl-test-exception" ,perl-test-exception)
1537 ("perl-test-file" ,perl-test-file)
1538 ("perl-test-file-contents" ,perl-test-file-contents)
1539 ("perl-test-mockmodule" ,perl-test-mockmodule)
adcad547 1540 ("perl-test-mockobject" ,perl-test-mockobject)
cabe8f18
CB
1541 ("perl-test-nowarnings" ,perl-test-nowarnings)
1542 ("perl-test-warn" ,perl-test-warn)))
1543 (inputs
1544 `(("perl-class-xsaccessor" ,perl-class-xsaccessor)
1545 ("perl-clone" ,perl-clone)
1546 ("perl-config-gitlike" ,perl-config-gitlike)
1547 ("perl-datetime" ,perl-datetime)
1548 ("perl-datetime-timezone" ,perl-datetime-timezone)
6a1c3a90 1549 ("perl-dbd-mysql" ,perl-dbd-mysql)
cabe8f18 1550 ("perl-dbd-pg" ,perl-dbd-pg)
6a1c3a90 1551 ("perl-dbd-sqlite" ,perl-dbd-sqlite)
cabe8f18
CB
1552 ("perl-dbi" ,perl-dbi)
1553 ("perl-devel-stacktrace" ,perl-devel-stacktrace)
1554 ("perl-encode-locale" ,perl-encode-locale)
cabe8f18
CB
1555 ("perl-hash-merge" ,perl-hash-merge)
1556 ("perl-ipc-run3" ,perl-ipc-run3)
1557 ("perl-ipc-system-simple" ,perl-ipc-system-simple)
1558 ("perl-libintl-perl" ,perl-libintl-perl)
1559 ("perl-list-moreutils" ,perl-list-moreutils)
1560 ("perl-moo" ,perl-moo)
1561 ("perl-mysql-config" ,perl-mysql-config)
1562 ("perl-namespace-autoclean" ,perl-namespace-autoclean)
1563 ("perl-path-class" ,perl-path-class)
1564 ("perl-perlio-utf8_strict" ,perl-perlio-utf8_strict)
1565 ("perl-string-formatter" ,perl-string-formatter)
1566 ("perl-string-shellquote" ,perl-string-shellquote)
1567 ("perl-sub-exporter" ,perl-sub-exporter)
1568 ("perl-template-tiny" ,perl-template-tiny)
1569 ("perl-template-toolkit" ,perl-template-toolkit)
1570 ("perl-throwable" ,perl-throwable)
1571 ("perl-try-tiny" ,perl-try-tiny)
1572 ("perl-type-tiny" ,perl-type-tiny)
1573 ("perl-type-tiny-xs" ,perl-type-tiny-xs)
1574 ("perl-uri" ,perl-uri)
1575 ("perl-uri-db" ,perl-uri-db)))
1576 (home-page "https://sqitch.org/")
1577 (synopsis "Database change management tool")
1578 (description
1579 "Sqitch is a standalone change management system for database schemas,
1580which uses SQL to describe changes.")
1581 (license license:x11)))
1582
311f06c9
TGR
1583(define-public sqlcrush
1584 ;; Unfortunately, there is no proper upstream release and may never be.
1585 (let ((commit "b5f6868f189566a26eecc78d0f0659813c1aa98a")
1586 (revision "1"))
1587 (package
1588 (name "sqlcrush")
1589 (version (git-version "0.1.5" revision commit))
1590 (source (origin
1591 (method git-fetch)
1592 (uri (git-reference
b0e7b699 1593 (url "https://github.com/coffeeandscripts/sqlcrush")
311f06c9
TGR
1594 (commit commit)))
1595 (file-name (git-file-name name version))
1596 (sha256
1597 (base32
1598 "0x3wy40r93p0jv3nbwj9a77wa4ff697d13r0wffmm7q9h3mzsww8"))))
1599 (build-system python-build-system)
1600 (inputs
1601 `(("python-cryptography" ,python-cryptography)
1602 ("python-psycopg2" ,python-psycopg2)
1603 ("python-pymysql" ,python-pymysql)
1604 ("python-sqlalchemy" ,python-sqlalchemy)))
1605 (home-page "https://github.com/coffeeandscripts/sqlcrush")
1606 (synopsis "Text console-based database viewer and editor")
1607 (description
1608 "SQLcrush lets you view and edit a database directly from the text
1609console through an ncurses interface. You can explore each table's structure,
1610browse and edit the contents, add and delete entries, all while tracking your
1611changes.")
1612 (license license:gpl3+)))) ; no headers, see README.md
1613
db60b1d9
LC
1614(define-public tdb
1615 (package
1616 (name "tdb")
10f004f0 1617 (version "1.4.3")
db60b1d9
LC
1618 (source (origin
1619 (method url-fetch)
ca473fc2 1620 (uri (string-append "https://www.samba.org/ftp/tdb/tdb-"
db60b1d9
LC
1621 version ".tar.gz"))
1622 (sha256
1623 (base32
10f004f0 1624 "06waz0k50c7v3chd08mzp2rv7w4k4q9isbxx3vhlfpx1vy9q61f8"))))
db60b1d9
LC
1625 (build-system gnu-build-system)
1626 (arguments
6ccb7814
EF
1627 '(#:phases
1628 (modify-phases %standard-phases
1629 (replace 'configure
1630 (lambda* (#:key outputs #:allow-other-keys)
1631 (let ((out (assoc-ref outputs "out")))
1632 ;; The 'configure' script is a wrapper for Waf and
1633 ;; doesn't recognize things like '--enable-fast-install'.
96272e28
MW
1634 (invoke "./configure"
1635 (string-append "--prefix=" out))))))))
db60b1d9
LC
1636 (native-inputs
1637 `(;; TODO: Build the documentation.
1638 ;; ("docbook-xsl" ,docbook-xsl)
1639 ;; ("libxml2" ,libxml2)
1640 ;; ("libxslt" ,libxslt)
97dcedbd
MB
1641 ("python" ,python) ;for the Waf build system
1642 ("which" ,which)))
1abd0904 1643 (home-page "https://tdb.samba.org/")
35b9e423 1644 (synopsis "Trivial database")
db60b1d9
LC
1645 (description
1646 "TDB is a Trivial Database. In concept, it is very much like GDBM,
1647and BSD's DB except that it allows multiple simultaneous writers and uses
1648locking internally to keep writers from trampling on each other. TDB is also
1649extremely small.")
ba8b9f8d 1650 (license license:lgpl3+)))
274da61d
LC
1651
1652(define-public perl-dbi
1653 (package
1654 (name "perl-dbi")
d0ed680b 1655 (version "1.643")
274da61d
LC
1656 (source (origin
1657 (method url-fetch)
1658 (uri (string-append
1659 "mirror://cpan/authors/id/T/TI/TIMB/DBI-"
1660 version ".tar.gz"))
1661 (sha256
1662 (base32
d0ed680b 1663 "1yinx39960y241vf2sknxj0dfz82a5m9gvklq5rw78k0nlyrjawa"))))
274da61d
LC
1664 (build-system perl-build-system)
1665 (synopsis "Database independent interface for Perl")
1666 (description "This package provides an database interface for Perl.")
9aba9b12 1667 (home-page "https://metacpan.org/release/DBI")
2f3108ad 1668 (license license:perl-license)))
274da61d 1669
feae3395
EB
1670(define-public perl-dbix-class
1671 (package
1672 (name "perl-dbix-class")
23ec2a0e 1673 (version "0.082842")
feae3395
EB
1674 (source
1675 (origin
1676 (method url-fetch)
1677 (uri (string-append "mirror://cpan/authors/id/R/RI/RIBASUSHI/"
1678 "DBIx-Class-" version ".tar.gz"))
1679 (sha256
23ec2a0e 1680 (base32 "1rh7idjjbibc1zmiaaarask434lh0lx7f2xyfwmy37k9fa0xcpmh"))))
feae3395
EB
1681 (build-system perl-build-system)
1682 (native-inputs
1683 `(("perl-dbd-sqlite" ,perl-dbd-sqlite)
1684 ("perl-file-temp" ,perl-file-temp)
2f837cf7 1685 ("perl-module-install" ,perl-module-install)
feae3395
EB
1686 ("perl-package-stash" ,perl-package-stash)
1687 ("perl-test-deep" ,perl-test-deep)
1688 ("perl-test-exception" ,perl-test-exception)
1689 ("perl-test-warn" ,perl-test-warn)))
1690 (propagated-inputs
1691 `(("perl-class-accessor-grouped" ,perl-class-accessor-grouped)
1692 ("perl-class-c3-componentised" ,perl-class-c3-componentised)
1693 ("perl-class-inspector" ,perl-class-inspector)
1694 ("perl-config-any" ,perl-config-any)
1695 ("perl-context-preserve" ,perl-context-preserve)
1696 ("perl-data-dumper-concise" ,perl-data-dumper-concise)
1697 ("perl-data-page" ,perl-data-page)
1698 ("perl-dbi" ,perl-dbi)
1699 ("perl-devel-globaldestruction" ,perl-devel-globaldestruction)
1700 ("perl-hash-merge" ,perl-hash-merge)
1701 ("perl-module-find" ,perl-module-find)
1702 ("perl-moo" ,perl-moo)
1703 ("perl-mro-compat" ,perl-mro-compat)
1704 ("perl-namespace-clean" ,perl-namespace-clean)
1705 ("perl-path-class" ,perl-path-class)
1706 ("perl-scalar-list-utils" ,perl-scalar-list-utils)
1707 ("perl-scope-guard" ,perl-scope-guard)
23ec2a0e 1708 ("perl-sql-abstract-classic" ,perl-sql-abstract-classic)
feae3395
EB
1709 ("perl-sub-name" ,perl-sub-name)
1710 ("perl-text-balanced" ,perl-text-balanced)
1711 ("perl-try-tiny" ,perl-try-tiny)))
9aba9b12 1712 (home-page "https://metacpan.org/release/DBIx-Class")
feae3395
EB
1713 (synopsis "Extensible and flexible object <-> relational mapper")
1714 (description "An SQL to OO mapper with an object API inspired by
1715Class::DBI (with a compatibility layer as a springboard for porting) and a
1716resultset API that allows abstract encapsulation of database operations. It
1717aims to make representing queries in your code as perl-ish as possible while
1718still providing access to as many of the capabilities of the database as
1719possible, including retrieving related records from multiple tables in a
1720single query, \"JOIN\", \"LEFT JOIN\", \"COUNT\", \"DISTINCT\", \"GROUP BY\",
1721\"ORDER BY\" and \"HAVING\" support.")
2f3108ad 1722 (license license:perl-license)))
e61fd0f0 1723
4e4039e5
EB
1724(define-public perl-dbix-class-cursor-cached
1725 (package
1726 (name "perl-dbix-class-cursor-cached")
180cb81b 1727 (version "1.001004")
4e4039e5
EB
1728 (source
1729 (origin
1730 (method url-fetch)
1731 (uri (string-append "mirror://cpan/authors/id/A/AR/ARCANEZ/"
1732 "DBIx-Class-Cursor-Cached-" version ".tar.gz"))
1733 (sha256
1734 (base32
180cb81b 1735 "09b2jahn2x12qm4f7qm1jzsxbz7qn1czp6a3fnl5l2i3l4r5421p"))))
4e4039e5
EB
1736 (build-system perl-build-system)
1737 (native-inputs
1738 `(("perl-cache-cache" ,perl-cache-cache)
2f837cf7
MB
1739 ("perl-dbd-sqlite" ,perl-dbd-sqlite)
1740 ("perl-module-install" ,perl-module-install)))
4e4039e5
EB
1741 (propagated-inputs
1742 `(("perl-carp-clan" ,perl-carp-clan)
1743 ("perl-dbix-class" ,perl-dbix-class)))
9aba9b12 1744 (home-page "https://metacpan.org/release/DBIx-Class-Cursor-Cached")
4e4039e5
EB
1745 (synopsis "Cursor with built-in caching support")
1746 (description "DBIx::Class::Cursor::Cached provides a cursor class with
1747built-in caching support.")
2f3108ad 1748 (license license:perl-license)))
4e4039e5 1749
e61fd0f0
EB
1750(define-public perl-dbix-class-introspectablem2m
1751 (package
1752 (name "perl-dbix-class-introspectablem2m")
7a462b80 1753 (version "0.001002")
e61fd0f0
EB
1754 (source
1755 (origin
1756 (method url-fetch)
68a9d6df 1757 (uri (string-append "mirror://cpan/authors/id/I/IL/ILMARI/"
e61fd0f0
EB
1758 "DBIx-Class-IntrospectableM2M-" version ".tar.gz"))
1759 (sha256
1760 (base32
7a462b80 1761 "1w47rh2241iy5x3a9bqsyd5kdp9sk43dksr99frzv4qn4jsazfn6"))))
e61fd0f0 1762 (build-system perl-build-system)
2f837cf7
MB
1763 (native-inputs
1764 `(("perl-module-install" ,perl-module-install)))
e61fd0f0
EB
1765 (propagated-inputs
1766 `(("perl-dbix-class" ,perl-dbix-class)))
9aba9b12 1767 (home-page "https://metacpan.org/release/DBIx-Class-IntrospectableM2M")
e61fd0f0
EB
1768 (synopsis "Introspect many-to-many relationships")
1769 (description "Because the many-to-many relationships are not real
1770relationships, they can not be introspected with DBIx::Class. Many-to-many
1771relationships are actually just a collection of convenience methods installed
1772to bridge two relationships. This DBIx::Class component can be used to store
1773all relevant information about these non-relationships so they can later be
1774introspected and examined.")
2f3108ad 1775 (license license:perl-license)))
708155df
EB
1776
1777(define-public perl-dbix-class-schema-loader
1778 (package
1779 (name "perl-dbix-class-schema-loader")
1672e7e7 1780 (version "0.07049")
708155df
EB
1781 (source
1782 (origin
1783 (method url-fetch)
1784 (uri (string-append "mirror://cpan/authors/id/I/IL/ILMARI/"
1785 "DBIx-Class-Schema-Loader-" version ".tar.gz"))
1786 (sha256
1787 (base32
1672e7e7 1788 "0r57fv71ypxafb85cpxph1hdqii7ipjwvc19yb6fpkvq2ggcssg8"))))
708155df
EB
1789 (build-system perl-build-system)
1790 (native-inputs
1791 `(("perl-config-any" ,perl-config-any)
1792 ("perl-config-general" ,perl-config-general)
1793 ("perl-dbd-sqlite" ,perl-dbd-sqlite)
1794 ("perl-dbix-class-introspectablem2m" ,perl-dbix-class-introspectablem2m)
2f837cf7 1795 ("perl-module-install" ,perl-module-install)
708155df
EB
1796 ("perl-moose" ,perl-moose)
1797 ("perl-moosex-markasmethods" ,perl-moosex-markasmethods)
1798 ("perl-moosex-nonmoose" ,perl-moosex-nonmoose)
1799 ("perl-namespace-autoclean" ,perl-namespace-autoclean)
1800 ("perl-test-deep" ,perl-test-deep)
1801 ("perl-test-differences" ,perl-test-differences)
1802 ("perl-test-exception" ,perl-test-exception)
1803 ("perl-test-pod" ,perl-test-pod)
1804 ("perl-test-warn" ,perl-test-warn)))
1805 (propagated-inputs
1806 `(("perl-class-unload" ,perl-class-unload)
1807 ("perl-class-inspector" ,perl-class-inspector)
1808 ("perl-class-accessor-grouped" ,perl-class-accessor-grouped)
1809 ("perl-class-c3-componentised" ,perl-class-c3-componentised)
1810 ("perl-carp-clan" ,perl-carp-clan)
1811 ("perl-data-dump" ,perl-data-dump)
1812 ("perl-dbix-class" ,perl-dbix-class)
1813 ("perl-hash-merge" ,perl-hash-merge)
1814 ("perl-list-moreutils" ,perl-list-moreutils)
1815 ("perl-lingua-en-inflect-phrase" ,perl-lingua-en-inflect-phrase)
1816 ("perl-lingua-en-inflect-number" ,perl-lingua-en-inflect-number)
1817 ("perl-lingua-en-tagger" ,perl-lingua-en-tagger)
1818 ("perl-namespace-clean" ,perl-namespace-clean)
1819 ("perl-mro-compat" ,perl-mro-compat)
1820 ("perl-scope-guard" ,perl-scope-guard)
1821 ("perl-string-camelcase" ,perl-string-camelcase)
1822 ("perl-string-toidentifier-en" ,perl-string-toidentifier-en)
1823 ("perl-sub-name" ,perl-sub-name)
1824 ("perl-try-tiny" ,perl-try-tiny)))
1825 (arguments `(#:tests? #f)) ;TODO: t/20invocations.t fails
9aba9b12 1826 (home-page "https://metacpan.org/release/DBIx-Class-Schema-Loader")
708155df
EB
1827 (synopsis "Create a DBIx::Class::Schema based on a database")
1828 (description "DBIx::Class::Schema::Loader automates the definition of a
1829DBIx::Class::Schema by scanning database table definitions and setting up the
1830columns, primary keys, unique constraints and relationships.")
2f3108ad 1831 (license license:perl-license)))
274da61d 1832
186eb132
EB
1833(define-public perl-dbd-pg
1834 (package
1835 (name "perl-dbd-pg")
8c078dde 1836 (version "3.7.4")
186eb132
EB
1837 (source
1838 (origin
1839 (method url-fetch)
1840 (uri (string-append "mirror://cpan/authors/id/T/TU/TURNSTEP/"
1841 "DBD-Pg-" version ".tar.gz"))
1842 (sha256
1843 (base32
8c078dde 1844 "0gkqlvbmzbdm0g4k328nlkjdg3wrjm5i2n9jxj1i8sqxkm79rylz"))))
186eb132
EB
1845 (build-system perl-build-system)
1846 (native-inputs
1847 `(("perl-dbi" ,perl-dbi)))
1848 (propagated-inputs
1849 `(("perl-dbi" ,perl-dbi)
1850 ("postgresql" ,postgresql)))
9aba9b12 1851 (home-page "https://metacpan.org/release/DBD-Pg")
186eb132 1852 (synopsis "DBI PostgreSQL interface")
f33e71fc
LC
1853 (description "This package provides a PostgreSQL driver for the Perl5
1854@dfn{Database Interface} (DBI).")
2f3108ad 1855 (license license:perl-license)))
186eb132 1856
4b7857a4
RW
1857(define-public perl-dbd-mysql
1858 (package
1859 (name "perl-dbd-mysql")
49596a54 1860 (version "4.050")
4b7857a4
RW
1861 (source
1862 (origin
1863 (method url-fetch)
49596a54 1864 (uri (string-append "mirror://cpan/authors/id/D/DV/DVEEDEN/"
4b7857a4
RW
1865 "DBD-mysql-" version ".tar.gz"))
1866 (sha256
49596a54 1867 (base32 "0y4djb048i09dk19av7mzfb3khr72vw11p3ayw2p82jsy4gm8j2g"))))
4b7857a4 1868 (build-system perl-build-system)
702a87f2
TGR
1869 (arguments
1870 `(#:phases
1871 (modify-phases %standard-phases
1872 (add-before 'configure 'skip-library-detection
1873 ;; Avoid depencies on perl-devel-checklib, openssl, and zlib. They
1874 ;; are really only needed for the test suite; their absence does not
1875 ;; affect the build or the end result.
1876 (lambda _
1877 (substitute* "Makefile.PL"
1878 (("use Devel::CheckLib;" match)
1879 (string-append "# " match))
1880 (("assert_lib")
1881 "print"))
1882 #t)))
1883 ;; Tests require running MySQL server.
1884 #:tests? #f))
4b7857a4
RW
1885 (propagated-inputs
1886 `(("perl-dbi" ,perl-dbi)
2b8491fb
JL
1887 ("mysql" ,mariadb "lib")
1888 ("mysql-dev" ,mariadb "dev")))
9aba9b12 1889 (home-page "https://metacpan.org/release/DBD-mysql")
4b7857a4
RW
1890 (synopsis "DBI MySQL interface")
1891 (description "This package provides a MySQL driver for the Perl5
1892@dfn{Database Interface} (DBI).")
2f3108ad 1893 (license license:perl-license)))
4b7857a4 1894
274da61d
LC
1895(define-public perl-dbd-sqlite
1896 (package
1897 (name "perl-dbd-sqlite")
25fb1e30 1898 (version "1.66")
274da61d
LC
1899 (source (origin
1900 (method url-fetch)
1901 (uri (string-append
1902 "mirror://cpan/authors/id/I/IS/ISHIGAKI/DBD-SQLite-"
1903 version ".tar.gz"))
1904 (sha256
1905 (base32
25fb1e30 1906 "1zljln5nh61gj3k22a1fv2vhx5l83waizmarwkh77hk6kzzmvrw9"))))
274da61d
LC
1907 (build-system perl-build-system)
1908 (inputs `(("sqlite" ,sqlite)))
1909 (propagated-inputs `(("perl-dbi" ,perl-dbi)))
1910 (synopsis "SQlite interface for Perl")
1911 (description "DBD::SQLite is a Perl DBI driver for SQLite, that includes
1912the entire thing in the distribution. So in order to get a fast transaction
1913capable RDBMS working for your Perl project you simply have to install this
1914module, and nothing else.")
2f3108ad 1915 (license license:perl-license)
9aba9b12 1916 (home-page "https://metacpan.org/release/DBD-SQLite")))
14e84b2d 1917
55916fa2
CB
1918(define-public perl-mysql-config
1919 (package
1920 (name "perl-mysql-config")
1921 (version "1.04")
1922 (source
1923 (origin
1924 (method url-fetch)
1925 (uri (string-append
1926 "mirror://cpan/authors/id/D/DA/DARREN/MySQL-Config-"
1927 version
1928 ".tar.gz"))
1929 (sha256
1930 (base32
1931 "1svn7ccw2gc4cazvc58j84rxhnc9vs01zpird0l8460598j475qr"))))
1932 (build-system perl-build-system)
1933 (home-page "https://metacpan.org/release/MySQL-Config")
1934 (synopsis "Parse and utilize MySQL's /etc/my.cnf and ~/.my.cnf files")
1935 (description
1936 "@code{MySQL::Config} emulates the @code{load_defaults} function from
7230f6d5 1937libmysqlclient. It will fill an array with long options, ready to be parsed by
55916fa2
CB
1938@code{Getopt::Long}.")
1939 (license license:perl-license)))
1940
dd90952e
EB
1941(define-public perl-sql-abstract
1942 (package
1943 (name "perl-sql-abstract")
7a358c78 1944 (version "1.87")
dd90952e
EB
1945 (source
1946 (origin
1947 (method url-fetch)
439980b7 1948 (uri (string-append "mirror://cpan/authors/id/I/IL/ILMARI/"
dd90952e
EB
1949 "SQL-Abstract-" version ".tar.gz"))
1950 (sha256
7a358c78 1951 (base32 "0jhw91b23wc9bkfwcgvka4x5ddxk58m9bcp5ay7a3vx77nla09p9"))))
dd90952e
EB
1952 (build-system perl-build-system)
1953 (native-inputs
9dab5017
MB
1954 `(("perl-module-install" ,perl-module-install)
1955 ("perl-test-deep" ,perl-test-deep)
dd90952e
EB
1956 ("perl-test-exception" ,perl-test-exception)
1957 ("perl-test-warn" ,perl-test-warn)))
1958 (propagated-inputs
1959 `(("perl-hash-merge" ,perl-hash-merge)
1960 ("perl-moo" ,perl-moo)
1961 ("perl-mro-compat" ,perl-mro-compat)
1962 ("perl-text-balanced" ,perl-text-balanced)))
9aba9b12 1963 (home-page "https://metacpan.org/release/SQL-Abstract")
dd90952e
EB
1964 (synopsis "Generate SQL from Perl data structures")
1965 (description "This module was inspired by the excellent DBIx::Abstract.
1966While based on the concepts used by DBIx::Abstract, the concepts used have
1967been modified to make the SQL easier to generate from Perl data structures.
1968The underlying idea is for this module to do what you mean, based on the data
1969structures you provide it, so that you don't have to modify your code every
e881752c 1970time your data changes.")
2f3108ad 1971 (license license:perl-license)))
14e84b2d 1972
5d01aeba
TGR
1973(define-public perl-sql-abstract-classic
1974 (package
1975 (name "perl-sql-abstract-classic")
1976 (version "1.91")
1977 (source
1978 (origin
1979 (method url-fetch)
1980 (uri (string-append "mirror://cpan/authors/id/R/RI/RIBASUSHI/"
1981 "SQL-Abstract-Classic-" version ".tar.gz"))
1982 (sha256
1983 (base32 "0a7g13hs3kdxrjn43sfli09mgsi9d6w0dfw6hlk268av17yisgaf"))))
1984 (build-system perl-build-system)
1985 (native-inputs
1986 `(("perl-test-deep" ,perl-test-deep)
1987 ("perl-test-exception" ,perl-test-exception)
1988 ("perl-test-warn" ,perl-test-warn)))
1989 (propagated-inputs
1990 `(("perl-mro-compat" ,perl-mro-compat)
1991 ("perl-sql-abstract" ,perl-sql-abstract)))
1992 (home-page "https://metacpan.org/release/SQL-Abstract-Classic")
1993 (synopsis "Generate SQL from Perl data structures")
1994 (description
1995 "This module is nearly identical to @code{SQL::Abstract} 1.81, and exists
1996to preserve the ability of users to opt into the new way of doing things in
1997later versions according to their own schedules.
1998
1999It is an abstract SQL generation module based on the concepts used by
2000@code{DBIx::Abstract}, with several important differences, especially when it
2001comes to @code{WHERE} clauses. These concepts were modified to make the SQL
2002easier to generate from Perl data structures.
2003
2004The underlying idea is for this module to do what you mean, based on the data
2005structures you provide it. You shouldn't have to modify your code every time
2006your data changes, as this module figures it out.")
2007 (license license:perl-license)))
2008
b4dcb026
EB
2009(define-public perl-sql-splitstatement
2010 (package
2011 (name "perl-sql-splitstatement")
2012 (version "1.00020")
2013 (source
2014 (origin
2015 (method url-fetch)
2016 (uri (string-append "mirror://cpan/authors/id/E/EM/EMAZEP/"
2017 "SQL-SplitStatement-" version ".tar.gz"))
2018 (sha256
2019 (base32
2020 "0bqg45k4c9qkb2ypynlwhpvzsl4ssfagmsalys18s5c79ps30z7p"))))
2021 (build-system perl-build-system)
2022 (native-inputs
2023 `(("perl-test-exception" ,perl-test-exception)))
2024 (propagated-inputs
2025 `(("perl-class-accessor" ,perl-class-accessor)
2026 ("perl-list-moreutils" ,perl-list-moreutils)
2027 ("perl-regexp-common" ,perl-regexp-common)
2028 ("perl-sql-tokenizer" ,perl-sql-tokenizer)))
9aba9b12 2029 (home-page "https://metacpan.org/release/SQL-SplitStatement")
b4dcb026
EB
2030 (synopsis "Split SQL code into atomic statements")
2031 (description "This module tries to split any SQL code, even including
2032non-standard extensions, into the atomic statements it is composed of.")
2f3108ad 2033 (license license:perl-license)))
b4dcb026 2034
718c89c1
EB
2035(define-public perl-sql-tokenizer
2036 (package
2037 (name "perl-sql-tokenizer")
2038 (version "0.24")
2039 (source
2040 (origin
2041 (method url-fetch)
2042 (uri (string-append "mirror://cpan/authors/id/I/IZ/IZUT/"
2043 "SQL-Tokenizer-" version ".tar.gz"))
2044 (sha256
2045 (base32
2046 "1qa2dfbzdlr5qqdam9yn78z5w3al5r8577x06qan8wv58ay6ka7s"))))
2047 (build-system perl-build-system)
9aba9b12 2048 (home-page "https://metacpan.org/release/SQL-Tokenizer")
718c89c1
EB
2049 (synopsis "SQL tokenizer")
2050 (description "SQL::Tokenizer is a tokenizer for SQL queries. It does not
2051claim to be a parser or query verifier. It just creates sane tokens from a
2052valid SQL query.")
2f3108ad 2053 (license license:perl-license)))
718c89c1 2054
14e84b2d
JD
2055(define-public unixodbc
2056 (package
2057 (name "unixodbc")
4712fdd8 2058 (version "2.3.9")
14e84b2d
JD
2059 (source (origin
2060 (method url-fetch)
e881752c 2061 (uri
14e84b2d 2062 (string-append
3fef0a2f
EF
2063 "ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-"
2064 version ".tar.gz"))
14e84b2d 2065 (sha256
4712fdd8 2066 (base32 "01xj65d02i3yjy7p9z08y9jakcs5szmz4rask868n7387nn3x0sj"))))
14e84b2d
JD
2067 (build-system gnu-build-system)
2068 (synopsis "Data source abstraction library")
2069 (description "Unixodbc is a library providing an API with which to access
2070data sources. Data sources include SQL Servers and any software with an ODBC
2071Driver.")
ba8b9f8d 2072 (license license:lgpl2.1+)
14e84b2d
JD
2073 ;; COPYING contains copy of lgpl2.1 - but copyright notices just say "LGPL"
2074 (home-page "http://www.unixodbc.org")))
b4a9c924
EB
2075
2076(define-public unqlite
2077 (package
2078 (name "unqlite")
2079 (version "1.1.6")
2080 (source (origin
2081 (method url-fetch)
2082 ;; Contains bug fixes against the official release, and has an
2083 ;; autotooled build system.
2084 (uri (string-append "https://github.com/aidin36/tocc/releases/"
2085 "download/v1.0.0/"
2086 "unqlite-unofficial-" version ".tar.gz"))
2087 (sha256
2088 (base32
2089 "1sbpvhg15gadq0mpcy16q7k3rkg4b4dicpnn5xifpkpn02sqik3s"))))
2090 (build-system gnu-build-system)
2091 (arguments `(#:tests? #f)) ;No check target
f50ef349 2092 (home-page "https://www.unqlite.org")
b4a9c924
EB
2093 (synopsis "In-memory key/value and document store")
2094 (description
2095 "UnQLite is an in-process software library which implements a
2096self-contained, serverless, zero-configuration, transactional NoSQL
2097database engine. UnQLite is a document store database similar to
2098MongoDB, Redis, CouchDB, etc. as well as a standard Key/Value store
69b4ffcf 2099similar to BerkeleyDB, LevelDB, etc.")
ba8b9f8d 2100 (license license:bsd-2)))
463f6766
DT
2101
2102(define-public redis
2103 (package
2104 (name "redis")
6a67f443 2105 (version "6.0.11")
463f6766
DT
2106 (source (origin
2107 (method url-fetch)
2108 (uri (string-append "http://download.redis.io/releases/redis-"
2109 version".tar.gz"))
2110 (sha256
2111 (base32
6a67f443 2112 "0prwqap452m581nyc3cz642d1z3x9nd81896hlqdm3z8238z49y9"))
3a1cb921
VL
2113 (modules '((guix build utils)))
2114 (snippet
2115 ;; Delete bundled jemalloc, as the package will use the libc one
2116 '(begin (delete-file-recursively "deps/jemalloc")
2117 #t))))
463f6766 2118 (build-system gnu-build-system)
3a1cb921
VL
2119 (native-inputs
2120 `(("procps" ,procps) ; for tests
2121 ("tcl" ,tcl))) ; for tests
463f6766 2122 (arguments
3a1cb921
VL
2123 '(#:phases
2124 (modify-phases %standard-phases
2125 (delete 'configure)
2126 (add-after 'unpack 'use-correct-tclsh
2127 (lambda* (#:key inputs #:allow-other-keys)
2128 (substitute* "runtest"
2129 (("^TCLSH=.*")
2130 (string-append "TCLSH="
2131 (assoc-ref inputs "tcl")
2132 "/bin/tclsh")))
2133 #t))
2134 (add-after 'unpack 'adjust-tests
2135 (lambda _
2136 ;; Disable failing tests
2137 (substitute* "tests/test_helper.tcl"
2138 ((" integration/replication[^-]") "")
2139 ((" integration/replication-4") "")
2140 ((" integration/replication-psync") ""))
2141 #t)))
463f6766
DT
2142 #:make-flags `("CC=gcc"
2143 "MALLOC=libc"
b25f060f 2144 "LDFLAGS=-ldl"
463f6766
DT
2145 ,(string-append "PREFIX="
2146 (assoc-ref %outputs "out")))))
2147 (synopsis "Key-value cache and store")
2148 (description "Redis is an advanced key-value cache and store. Redis
2149supports many data structures including strings, hashes, lists, sets, sorted
2150sets, bitmaps and hyperloglogs.")
5a3cbfce 2151 (home-page "https://redis.io/")
ba8b9f8d 2152 (license license:bsd-3)))
a65e2a02 2153
2154(define-public kyotocabinet
2155 (package
2156 (name "kyotocabinet")
2a0a6f8f 2157 (version "1.2.79")
a65e2a02 2158 (source (origin
2159 (method url-fetch)
7fc2ba2a
TGR
2160 (uri (string-append "https://fallabs.com/kyotocabinet/pkg/"
2161 "kyotocabinet-" version ".tar.gz"))
a65e2a02 2162 (sha256
2163 (base32
2a0a6f8f 2164 "079ymsahlrijswgwfr2la9yw5h57l752cprhp5dz31iamsj1vyv7"))))
a65e2a02 2165 (build-system gnu-build-system)
2166 (arguments
2167 `(#:configure-flags
2168 (list
9d59023e 2169 "--disable-opt" ;"-march=native". XXX this also turns off -O0.
a65e2a02 2170 (string-append "LDFLAGS=-Wl,-rpath="
2171 (assoc-ref %outputs "out") "/lib"))))
2172 (inputs `(("zlib" ,zlib)))
7fc2ba2a 2173 (home-page "https://fallabs.com/kyotocabinet/")
a65e2a02 2174 (synopsis
2175 "Kyoto Cabinet is a modern implementation of the DBM database")
2176 (description
2177 "Kyoto Cabinet is a standalone file-based database that supports Hash
2178and B+ Tree data storage models. It is a fast key-value lightweight
2179database and supports many programming languages. It is a NoSQL database.")
ba8b9f8d 2180 (license license:gpl3+)))
6242b314 2181
bdc11dc4 2182(define-public tokyocabinet
2183 (package
2184 (name "tokyocabinet")
2185 (version "1.4.48")
2186 (source
2187 (origin
2188 (method url-fetch)
2189 (uri (string-append "http://fallabs.com/tokyocabinet/"
2190 name "-" version ".tar.gz"))
2191 (sha256
2192 (base32
2193 "140zvr0n8kvsl0fbn2qn3f2kh3yynfwnizn4dgbj47m975yg80x0"))))
2194 (build-system gnu-build-system)
2195 (arguments
2196 `(#:configure-flags
2197 (list "--enable-pthread" "--enable-off64" "--enable-fastest"
2198 (string-append "LDFLAGS=-Wl,-rpath="
2199 (assoc-ref %outputs "out") "/lib"))))
2200 (inputs
2201 `(("zlib" ,zlib)))
2202 (home-page "http://fallabs.com/tokyocabinet/")
2203 (synopsis "Tokyo Cabinet is a modern implementation of the DBM database")
2204 (description
2205 "Tokyo Cabinet is a library of routines for managing a database.
2206The database is a simple data file containing records, each is a pair of a
2207key and a value. Every key and value is serial bytes with variable length.
2208Both binary data and character string can be used as a key and a value.
2209There is neither concept of data tables nor data types. Records are
2210organized in hash table, B+ tree, or fixed-length array.")
2211 (license license:lgpl2.1+)))
2212
6242b314
SB
2213(define-public wiredtiger
2214 (package
2215 (name "wiredtiger")
81e95821 2216 (version "2.9.1")
6242b314
SB
2217 (source (origin
2218 (method url-fetch)
2219 (uri (string-append
2220 "http://source.wiredtiger.com/releases/wiredtiger-"
2221 version ".tar.bz2"))
2222 (sha256
2223 (base32
81e95821 2224 "0krwnb2zfbhvjaskwl875qzd3y626s84zcciq2mxr5c5riw3yh6s"))))
6242b314
SB
2225 (build-system gnu-build-system)
2226 (arguments
a469c695 2227 '(#:configure-flags '("--enable-lz4" "--with-builtins=snappy,zlib")
6242b314
SB
2228 #:phases
2229 (modify-phases %standard-phases
2230 (add-before 'check 'disable-test/fops
2231 (lambda _
2232 ;; XXX: timed out after 3600 seconds of silence
2233 (substitute* "Makefile"
2234 (("test/fops") ""))
2235 #t)))))
2236 (inputs
2237 `(("lz4" ,lz4)
3faa422d
CB
2238 ("zlib" ,zlib)
2239 ("snappy" ,snappy)))
6242b314
SB
2240 (home-page "http://source.wiredtiger.com/")
2241 (synopsis "NoSQL data engine")
2242 (description
2243 "WiredTiger is an extensible platform for data management. It supports
2244row-oriented storage (where all columns of a row are stored together),
2245column-oriented storage (where columns are stored in groups, allowing for
2246more efficient access and storage of column subsets) and log-structured merge
2247trees (LSM), for sustained throughput under random insert workloads.")
ba8b9f8d 2248 (license license:gpl3) ; or GPL-2
6242b314 2249 ;; configure.ac: WiredTiger requires a 64-bit build.
092b7b3e 2250 (supported-systems '("x86_64-linux" "mips64el-linux" "aarch64-linux"))))
90c2ee88 2251
4680fef7
AB
2252(define-public wiredtiger-3
2253 (package
2254 (inherit wiredtiger)
2255 (name "wiredtiger")
2256 (version "3.1.0")
2257 (source (origin
2258 (method url-fetch)
2259 (uri (string-append "http://source.wiredtiger.com/releases/wiredtiger-"
2260 version ".tar.bz2"))
2261 (sha256
2262 (base32
2263 "014awypv579ascg4jbx4pndj2wld337m79yyzrzyr7hxrff139jx"))))))
2264
16973071
KB
2265(define-public guile-wiredtiger
2266 (package
2267 (name "guile-wiredtiger")
b1e6b938 2268 (version "0.7.0")
16973071
KB
2269 (source (origin
2270 (method git-fetch)
2271 (uri (git-reference
2272 (url "https://framagit.org/a-guile-mind/guile-wiredtiger.git")
b1e6b938 2273 (commit "340ad4bc2ff4dcc6216a2f5c6f9172ca320ac66b")))
16973071
KB
2274 (file-name (string-append name "-" version "-checkout"))
2275 (sha256
2276 (base32
b1e6b938 2277 "15j36bvxxzil7qpwlmh1rffqpva3ynvrcpqhhqbj2c9208ayz595"))))
16973071
KB
2278 (build-system gnu-build-system)
2279 (arguments
3926a099 2280 '(#:parallel-tests? #f ;; tests can't be run in parallel, yet.
16973071
KB
2281 #:configure-flags
2282 (list (string-append "--with-libwiredtiger-prefix="
2283 (assoc-ref %build-inputs "wiredtiger")))
189be331 2284 #:make-flags '("GUILE_AUTO_COMPILE=0")))
16973071
KB
2285 (native-inputs
2286 `(("autoconf" ,autoconf)
2287 ("automake" ,automake)
2288 ("pkg-config" ,pkg-config)))
2289 (inputs
b1e6b938 2290 `(("wiredtiger" ,wiredtiger-3)
16973071
KB
2291 ("guile" ,guile-2.2)))
2292 (propagated-inputs
b1e6b938 2293 `(("guile-bytestructures" ,guile-bytestructures)))
3926a099 2294 (synopsis "WiredTiger bindings for GNU Guile")
16973071
KB
2295 (description
2296 "This package provides Guile bindings to the WiredTiger ``NoSQL''
b1e6b938 2297database.")
16973071
KB
2298 (home-page "https://framagit.org/a-guile-mind/guile-wiredtiger")
2299 (license license:gpl3+)))
2300
90c2ee88
DM
2301(define-public perl-db-file
2302 (package
2303 (name "perl-db-file")
24dd78a3 2304 (version "1.855")
90c2ee88
DM
2305 (source
2306 (origin
2307 (method url-fetch)
76899e92
TGR
2308 (uri (string-append "mirror://cpan/authors/id/P/PM/PMQS/DB_File-"
2309 version ".tar.gz"))
90c2ee88 2310 (sha256
24dd78a3 2311 (base32 "0q599h7g4jkzks5dxf1zifx9k7l9vif26r2dlgkzxkg6bfif5zyr"))))
90c2ee88
DM
2312 (build-system perl-build-system)
2313 (inputs `(("bdb" ,bdb)))
2314 (native-inputs `(("perl-test-pod" ,perl-test-pod)))
2315 (arguments
2316 `(#:phases (modify-phases %standard-phases
2317 (add-before
2318 'configure 'modify-config.in
2319 (lambda* (#:key inputs #:allow-other-keys)
2320 (substitute* "config.in"
2321 (("/usr/local/BerkeleyDB") (assoc-ref inputs "bdb")))
2322 #t)))))
9aba9b12 2323 (home-page "https://metacpan.org/release/DB_File")
ce054e84 2324 (synopsis "Perl5 access to Berkeley DB version 1.x")
90c2ee88
DM
2325 (description
2326 "The DB::File module provides Perl bindings to the Berkeley DB version 1.x.")
2f3108ad 2327 (license license:perl-license)))
0e1b262e
DC
2328
2329(define-public lmdb
2330 (package
2331 (name "lmdb")
5f299b4a 2332 (version "0.9.28")
f167b432
TGR
2333 (source
2334 (origin
2335 (method git-fetch)
2336 (uri (git-reference
8fc6059b 2337 (url "https://git.openldap.org/openldap/openldap.git")
f167b432
TGR
2338 (commit (string-append "LMDB_" version))))
2339 (file-name (git-file-name name version))
2340 (sha256
5f299b4a 2341 (base32 "012a8bs49cswsnzw7k4piis5b6dn4by85w7a7mai9i04xcjyy9as"))))
0e1b262e
DC
2342 (build-system gnu-build-system)
2343 (arguments
2344 `(#:test-target "test"
2345 #:phases
2346 (modify-phases %standard-phases
2347 (replace 'configure
2348 (lambda* (#:key outputs #:allow-other-keys)
f167b432 2349 (chdir "libraries/liblmdb")
0e1b262e
DC
2350 (substitute* "Makefile"
2351 (("/usr/local") (assoc-ref outputs "out")))
46c2cf69
EF
2352 #t))
2353 (add-after 'install 'create-pkg-config-file
2354 (lambda* (#:key outputs #:allow-other-keys)
2355 (let ((out (assoc-ref outputs "out")))
2356 (mkdir-p (string-append out "/lib/pkgconfig"))
2357 (with-output-to-file (string-append out "/lib/pkgconfig/liblmdb.pc")
2358 (lambda _
2359 (format #t "prefix=~a~@
2360 exec_prefix=~a~@
2361 libdir=~a/lib~@
2362 includedir=~a/include~@
2363 ~@
2364 Name: liblmdb~@
2365 Version: ~a~@
2366 Description: Lightning Memory-Mapped Database library~@
2367 Libs: -L${libdir} -llmdb~@
2368 Cflags: -I${includedir}~%"
2369 out out out out ,version)))
2370 #t))))))
669fde53 2371 (home-page "https://symas.com/lmdb/")
fda852ff
TGR
2372 (synopsis "Lightning Memory-Mapped Database library")
2373 (description
2374 "The @dfn{Lightning Memory-Mapped Database} (LMDB) is a high-performance
2375transactional database. Unlike more complex relational databases, LMDB handles
2376only key-value pairs (stored as arbitrary byte arrays) and relies on the
2377underlying operating system for caching and locking, keeping the code small and
2378simple.
2379The use of ‘zero-copy’ memory-mapped files combines the persistence of classic
2380disk-based databases with high read performance that scales linearly over
2381multiple cores. The size of each database is limited only by the size of the
2382virtual address space — not physical RAM.")
0e1b262e 2383 (license license:openldap2.8)))
fe71eee0 2384
659bc436 2385(define-public lmdbxx
2386 (package
2387 (name "lmdbxx")
2388 (version "0.9.14.0")
2389 (source
2390 (origin
2391 (method git-fetch)
2392 (uri (git-reference
b0e7b699 2393 (url "https://github.com/drycpp/lmdbxx")
659bc436 2394 (commit version)))
2395 (file-name (git-file-name name version))
2396 (sha256
2397 (base32 "1jmb9wg2iqag6ps3z71bh72ymbcjrb6clwlkgrqf1sy80qwvlsn6"))))
2398 (arguments
2399 `(#:make-flags
2400 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
2401 #:phases
2402 (modify-phases %standard-phases
2403 (delete 'configure))))
2404 (build-system gnu-build-system)
2405 (inputs `(("lmdb" ,lmdb)))
2406 (home-page "http://lmdbxx.sourceforge.net")
2407 (synopsis "C++11 wrapper for the LMDB embedded B+ tree database library")
2408 (description "@code{lmdbxx} is a comprehensive @code{C++} wrapper for the
2409@code{LMDB} embedded database library, offering both an error-checked
2410procedural interface and an object-oriented resource interface with RAII
2411semantics.")
2412 (license license:unlicense)))
2413
fe71eee0
JN
2414(define-public libpqxx
2415 (package
2416 (name "libpqxx")
2417 (version "4.0.1")
2418 (source (origin
2419 (method url-fetch)
2420 (uri (string-append
2421 "http://pqxx.org/download/software/libpqxx/"
2422 name "-" version ".tar.gz"))
2423 (sha256
2424 (base32
2425 "0f6wxspp6rx12fkasanb0z2g2gc8dhcfwnxagx8wwqbpg6ifsz09"))))
2426 (build-system gnu-build-system)
2427 (native-inputs
2428 `(("python" ,python-2)))
2429 (inputs `(("postgresql" ,postgresql)))
2430 (arguments
5ac097e2
MB
2431 `(#:tests? #f ; # FAIL: 1
2432 #:phases
2433 (modify-phases %standard-phases
2434 (add-before 'configure 'fix-sed-command
2435 (lambda _
2436 ;; Newer sed versions error out if double brackets are not used.
2437 (substitute* "configure"
2438 (("\\[:space:\\]") "[[:space:]]"))
2439 #t)))))
fe71eee0
JN
2440 (synopsis "C++ connector for PostgreSQL")
2441 (description
2442 "Libpqxx is a C++ library to enable user programs to communicate with the
2443PostgreSQL database back-end. The database back-end can be local or it may be
2444on another machine, accessed via TCP/IP.")
2445 (home-page "http://pqxx.org/")
2446 (license license:bsd-3)))
4d98bfaf
EF
2447
2448(define-public python-peewee
2449 (package
2450 (name "python-peewee")
0fecc6ce 2451 (version "3.14.0")
831f1ff9
MR
2452 (source
2453 (origin
2454 (method url-fetch)
2455 (uri (pypi-uri "peewee" version))
2456 (sha256
0fecc6ce 2457 (base32 "1yl49gxrg0c2x3n3r60z3lixw9am8b61s0477l9vjabhhx1yziar"))))
4d98bfaf
EF
2458 (build-system python-build-system)
2459 (arguments
0fecc6ce 2460 `(#:tests? #f)) ; fails to import test data
831f1ff9
MR
2461 (inputs
2462 `(("sqlite" ,sqlite)))
4d98bfaf
EF
2463 (native-inputs
2464 `(("python-cython" ,python-cython)))
2465 (home-page "https://github.com/coleifer/peewee/")
2466 (synopsis "Small object-relational mapping utility")
2467 (description
2468 "Peewee is a simple and small ORM (object-relation mapping) tool. Peewee
2469handles converting between pythonic values and those used by databases, so you
2470can use Python types in your code without having to worry. It has built-in
2471support for sqlite, mysql and postgresql. If you already have a database, you
2472can autogenerate peewee models using @code{pwiz}, a model generator.")
2473 (license license:expat)))
2474
2475(define-public python2-peewee
2476 (package-with-python2 python-peewee))
62ea44fc 2477
1110a421
LDB
2478(define-public python-tortoise-orm
2479 (package
2480 (name "python-tortoise-orm")
e7a3ae1e 2481 (version "0.16.21")
1110a421
LDB
2482 (source
2483 (origin
2484 (method url-fetch)
2485 (uri (pypi-uri "tortoise-orm" version))
2486 (sha256
2487 (base32
e7a3ae1e 2488 "1dallk0q8q4v37klm0v3rppf2w8sjkqmypc1w8r9rraqxg1ylacp"))))
1110a421 2489 (build-system python-build-system)
e7a3ae1e
LDB
2490 (arguments
2491 `(#:tests? #f ; Pypi does not have tests and Git snapshot depends on
2492 ; poetry.
2493 #:phases (modify-phases %standard-phases
2494 (add-after 'unpack 'relax-version-requirements
2495 (lambda _
2496 (substitute* "setup.py"
2497 (("pypika>=0\\.44\\.0,<0\\.45\\.0") "pypika")
14392c77
LDB
2498 (("aiosqlite>=0.16.0,<0.17.0") "aiosqlite")
2499 (("pytz>=2020\\.4,<2021\\.0") "pytz")
2500 ;; Not required, since ciso8601 is used.
2501 (("'iso8601>=0\\.1\\.13,<0\\.2\\.0',") ""))
e7a3ae1e 2502 #t)))))
1110a421 2503 (native-inputs
b9d96ed7 2504 `(("python-asynctest" ,python-asynctest)
1110a421
LDB
2505 ("python-nose2" ,python-nose2)))
2506 (propagated-inputs
2507 `(("python-aiosqlite" ,python-aiosqlite)
2508 ("python-pypika" ,python-pypika)
b9d96ed7 2509 ("python-ciso8601" ,python-ciso8601)
14392c77 2510 ("python-pytz" ,python-pytz)
1110a421
LDB
2511 ("python-typing-extensions"
2512 ,python-typing-extensions)))
2513 (home-page
2514 "https://github.com/tortoise/tortoise-orm")
2515 (synopsis
2516 "Easy async ORM for python, built with relations in mind")
2517 (description
2518 "Tortoise ORM is an easy-to-use asyncio ORM (Object Relational Mapper)
2519inspired by Django. Tortoise ORM was build with relations in mind and
2520admiration for the excellent and popular Django ORM. It’s engraved in its
2521design that you are working not with just tables, you work with relational
2522data.")
2523 (license license:asl2.0)))
2524
62ea44fc
AP
2525(define-public sqlcipher
2526 (package
2527 (name "sqlcipher")
682c2918 2528 (version "3.4.2")
62ea44fc
AP
2529 (source
2530 (origin
2531 (method url-fetch)
2532 (uri (string-append "https://github.com/sqlcipher/" name
2533 "/archive/v" version ".tar.gz"))
2534 (sha256
682c2918 2535 (base32 "1nxarwbci8jx99f1d0y1ivxcv25s78l1p7q6qy28lkpkcx8pm2b9"))
62ea44fc
AP
2536 (file-name (string-append name "-" version ".tar.gz"))))
2537 (build-system gnu-build-system)
2538 (inputs
2539 `(("libcrypto" ,openssl)
2540 ("libtcl8.6" ,tcl))) ; required for running the tests
2541 (native-inputs
2542 `(("tcl" ,tcl)))
2543 (arguments
2544 '(#:configure-flags
2545 '("--enable-tempstore=yes"
2546 "CFLAGS=-DSQLITE_HAS_CODEC -DSQLITE_ENABLE_FTS3"
2547 "LDFLAGS=-lcrypto -ltcl8.6"
2548 "--disable-tcl")
2549 ;; tests cannot be run from the Makefile
2550 ;; see: <https://github.com/sqlcipher/sqlcipher/issues/172>
2551 #:test-target "testfixture"
2552 #:phases
2553 (modify-phases %standard-phases
2554 (add-before 'check 'build-test-runner
2555 (assoc-ref %standard-phases 'check))
2556 (replace 'check
2557 (lambda _
96272e28 2558 (invoke "./testfixture" "test/crypto.test"))))))
62ea44fc
AP
2559 (home-page "https://www.zetetic.net/sqlcipher/")
2560 (synopsis
2561 "Library providing transparent encryption of SQLite database files")
2562 (description "SQLCipher is an implementation of SQLite, extended to
2563provide transparent 256-bit AES encryption of database files. Pages are
2564encrypted before being written to disk and are decrypted when read back. It’s
2565well suited for protecting embedded application databases and for mobile
2566development.")
2567 ;; The source files
2568 ;; src/{crypto.c,crypto_impl.c,crypto.h,crypto_cc.c,crypto_libtomcrypt.c},
2569 ;; src/{crypto_openssl.c,sqlcipher.h}, tool/crypto-speedtest.tcl,
2570 ;; test/crypto.test are licensed under a 3-clause BSD license. All other
2571 ;; source files are in the public domain.
2572 (license (list license:public-domain license:bsd-3))))
98d403bb
DM
2573
2574(define-public python-pyodbc-c
2575 (package
2576 (name "python-pyodbc-c")
c6b6a74e 2577 (version "3.1.4")
98d403bb
DM
2578 (source
2579 (origin
2580 (method url-fetch)
2581 (uri (string-append "https://gitlab.com/daym/pyodbc-c/repository/"
2582 "archive.tar.gz?ref=v" version))
2583 (sha256
2584 (base32
c6b6a74e 2585 "05aq2297k779xidmxcwkrrxjvj1bh2q7d9a1rcjv6zr15y764ga9"))
98d403bb
DM
2586 (file-name (string-append name "-" version ".tar.gz"))))
2587 (build-system python-build-system)
2588 (inputs
2589 `(("unixodbc" ,unixodbc)))
2590 (arguments
2591 `(;; No unit tests exist.
2592 #:tests? #f))
2593 (home-page "https://github.com/mkleehammer/pyodbc")
2594 (synopsis "Python ODBC Library")
2595 (description "@code{python-pyodbc-c} provides a Python DB-API driver
2596for ODBC.")
2597 (license (license:x11-style "file://LICENSE.TXT"))))
2598
2599(define-public python2-pyodbc-c
2600 (package-with-python2 python-pyodbc-c))
d39a84e8 2601
41916bea
DM
2602(define-public python-pyodbc
2603 (package
2604 (name "python-pyodbc")
dbc8a6e7 2605 (version "4.0.30")
41916bea
DM
2606 (source
2607 (origin
2608 (method url-fetch)
2609 (uri (pypi-uri "pyodbc" version))
2610 (sha256
dbc8a6e7 2611 (base32 "0skjpraar6hcwsy82612bpj8nw016ncyvvq88j5syrikxgp5saw5"))
41916bea
DM
2612 (file-name (string-append name "-" version ".tar.gz"))))
2613 (build-system python-build-system)
2614 (inputs
2615 `(("unixodbc" ,unixodbc)))
2616 (arguments
d5be746a 2617 `(#:tests? #f)) ; no unit tests exist
41916bea
DM
2618 (home-page "https://github.com/mkleehammer/pyodbc")
2619 (synopsis "Python ODBC Library")
2620 (description "@code{python-pyodbc} provides a Python DB-API driver
2621for ODBC.")
2622 (license (license:x11-style "file:///LICENSE.TXT"))))
2623
2624(define-public python2-pyodbc
2625 (package-with-python2 python-pyodbc))
2626
d39a84e8
AI
2627(define-public mdbtools
2628 (package
2629 (name "mdbtools")
2630 (version "0.7.1")
2631 (source
2632 (origin
f1f1cebd
RW
2633 (method git-fetch)
2634 (uri (git-reference
b0e7b699 2635 (url "https://github.com/brianb/mdbtools")
f1f1cebd
RW
2636 (commit version)))
2637 (file-name (git-file-name name version))
d39a84e8
AI
2638 (sha256
2639 (base32
f1f1cebd 2640 "0gwcpp9y09xhs21g7my2fs8ncb8i6ahlyixcx8jd3q97jbzj441l"))))
d39a84e8
AI
2641 (build-system gnu-build-system)
2642 (inputs
2643 `(("glib" ,glib)))
2644 (native-inputs
2645 `(("autoconf" ,autoconf)
2646 ("automake" ,automake)
2647 ("libtool" ,libtool)
2648 ("pkg-config" ,pkg-config)
2649 ("txt2man" ,txt2man)
2650 ("which" ,which)))
d39a84e8
AI
2651 (home-page "http://mdbtools.sourceforge.net/")
2652 (synopsis "Read Microsoft Access databases")
2653 (description "MDB Tools is a set of tools and applications to read the
2654proprietary MDB file format used in Microsoft's Access database package. This
2655includes programs to export schema and data from Microsoft's Access database
2656file format to other databases such as MySQL, Oracle, Sybase, PostgreSQL,
2657etc., and an SQL engine for performing simple SQL queries.")
2658 (license (list license:lgpl2.0
2659 license:gpl2+))))
07041d95
TGR
2660
2661(define-public python-lmdb
2662 (package
2663 (name "python-lmdb")
771c266b 2664 (version "1.0.0")
07041d95
TGR
2665 (source (origin
2666 (method url-fetch)
2667 (uri (pypi-uri "lmdb" version))
2668 (sha256
2669 (base32
771c266b 2670 "1di1gj2agbxwqqwrpk4w58dpfah0kl10ha20s63dlqdd1bgzydj1"))
07041d95
TGR
2671 (modules '((guix build utils)))
2672 (snippet
2673 ;; Delete bundled lmdb source files.
6cbee49d
MW
2674 '(begin
2675 (for-each delete-file (list "lib/lmdb.h"
2676 "lib/mdb.c"
2677 "lib/midl.c"
2678 "lib/midl.h"))
2679 #t))))
07041d95
TGR
2680 (build-system python-build-system)
2681 (inputs
2682 `(("lmdb" ,lmdb)))
2683 (arguments
2684 `(#:phases
2685 (modify-phases %standard-phases
2686 (add-before 'build 'use-system-lmdb
2687 (lambda* (#:key inputs #:allow-other-keys)
2688 (let ((lmdb (assoc-ref inputs "lmdb")))
771c266b 2689 (setenv "LMDB_PURE" "set") ; don't apply env-copy-txn.patch
07041d95
TGR
2690 (setenv "LMDB_FORCE_SYSTEM" "set")
2691 (setenv "LMDB_INCLUDEDIR" (string-append lmdb "/include"))
2692 (setenv "LMDB_LIBDIR" (string-append lmdb "/lib"))
2693 #t))))
2694 ;; Tests fail with: ‘lmdb.tool: Please specify environment (--env)’.
2695 #:tests? #f))
2696 (home-page "https://github.com/dw/py-lmdb")
2697 (synopsis "Python binding for the ‘Lightning’ database (LMDB)")
2698 (description
2699 "python-lmdb or py-lmdb is a Python binding for the @dfn{Lightning
2700Memory-Mapped Database} (LMDB), a high-performance key-value store.")
2701 (license
2702 (list license:openldap2.8
2703 ;; ‘lib/win32/inttypes.h’ and ‘lib/win32-stdint/stdint.h’ are BSD-3,
2704 ;; but not actually needed on platforms currently supported by Guix.
2705 license:bsd-3))))
2706
da1f7a9e
BW
2707(define-public python-orator
2708 (package
2709 (name "python-orator")
51d42caa 2710 (version "0.9.9")
da1f7a9e
BW
2711 (source (origin
2712 (method url-fetch)
2713 (uri (pypi-uri "orator" version))
2714 (sha256
2715 (base32
51d42caa 2716 "0mbgybz63ryhr9p1f4glnls5c57jp6il3dw0kf97f3pj80687rvg"))))
da1f7a9e 2717 (build-system python-build-system)
51d42caa
MB
2718 ;; FIXME: Tests are not distributed with PyPI, and the repository
2719 ;; does not contain setup.py. How to test?
2720 (arguments '(#:tests? #f))
da1f7a9e
BW
2721 (propagated-inputs
2722 `(("python-backpack" ,python-backpack)
2723 ("python-blinker" ,python-blinker)
2724 ("python-cleo" ,python-cleo)
2725 ("python-faker" ,python-faker)
2726 ("python-inflection" ,python-inflection)
2727 ("python-lazy-object-proxy" ,python-lazy-object-proxy)
2728 ("python-pendulum" ,python-pendulum)
2729 ("python-pyaml" ,python-pyaml)
2730 ("python-pygments" ,python-pygments)
51d42caa 2731 ("python-pyyaml" ,python-pyyaml)
da1f7a9e
BW
2732 ("python-simplejson" ,python-simplejson)
2733 ("python-six" ,python-six)
2734 ("python-wrapt" ,python-wrapt)))
2735 (home-page "https://orator-orm.com/")
2736 (synopsis "ActiveRecord ORM for Python")
2737 (description
2738 "Orator provides a simple ActiveRecord-like Object Relational Mapping
2739implementation for Python.")
2740 (license license:expat)
2741 (properties `((python2-variant . ,(delay python2-orator))))))
2742
2743(define-public python2-orator
2744 (package-with-python2 (strip-python2-variant python-orator)))
61ce0998
RJ
2745
2746(define-public virtuoso-ose
2747 (package
2748 (name "virtuoso-ose")
e63da346 2749 (version "7.2.5")
61ce0998
RJ
2750 (source
2751 (origin
2752 (method url-fetch)
2753 (uri (string-append
2754 "https://github.com/openlink/virtuoso-opensource/releases/"
2755 "download/v" version "/virtuoso-opensource-" version ".tar.gz"))
2756 (sha256
e63da346 2757 (base32 "0r1xakclkfi69pzh8z2k16z3x0m49pxp764icj0ad4w4bb97fr42"))))
61ce0998
RJ
2758 (build-system gnu-build-system)
2759 (arguments
6d09a7b5
RJ
2760 `(#:tests? #f ; Tests require a network connection.
2761 ;; TODO: Removing the libsrc/zlib source directory breaks the build.
2762 ;; This indicates that the internal zlib code may still be used.
2763 #:configure-flags '("--without-internal-zlib"
d26bf529
RJ
2764 "--with-readline"
2765 "--enable-static=no")
2766 #:phases
2767 (modify-phases %standard-phases
2768 ;; Even with "--enable-static=no", "libvirtuoso-t.a" is left in
2769 ;; the build output. The following phase removes it.
2770 (add-after 'install 'remove-static-libs
2771 (lambda* (#:key outputs #:allow-other-keys)
2772 (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
2773 (for-each (lambda (file)
2774 (delete-file (string-append lib "/" file)))
2775 '("libvirtuoso-t.a"
2776 "libvirtuoso-t.la"))))))))
61ce0998 2777 (inputs
95c633e0 2778 `(("openssl" ,openssl-1.0)
6d09a7b5
RJ
2779 ("net-tools" ,net-tools)
2780 ("readline" ,readline)
2781 ("zlib" ,zlib)))
61ce0998
RJ
2782 (home-page "http://vos.openlinksw.com/owiki/wiki/VOS/")
2783 (synopsis "Multi-model database system")
2784 (description "Virtuoso is a scalable cross-platform server that combines
2785relational, graph, and document data management with web application server
2786and web services platform functionality.")
48b68c61
EF
2787 ;; configure: error: ... can only be build on 64bit platforms
2788 (supported-systems '("x86_64-linux" "mips64el-linux" "aarch64-linux"))
61ce0998 2789 (license license:gpl2)))
74248d22 2790
a8714bf6
RW
2791(define-public python-ccm
2792 (package
2793 (name "python-ccm")
2794 (version "2.1.6")
2795 (source
2796 (origin
2797 (method url-fetch)
2798 (uri (pypi-uri "ccm" version))
2799 (sha256
2800 (base32
2801 "177dfxsmk3k4cih6fh6v8d91bh4nqx7ns6pc07w7m7i3cvdx3c8n"))))
2802 (build-system python-build-system)
2803 (propagated-inputs
2804 `(("python-pyyaml" ,python-pyyaml)
2805 ;; Not listed in setup.py, but used in ccmlib/node.py for full
2806 ;; functionality
2807 ("python-psutil" ,python-psutil)
2808 ("python-six" ,python-six)))
2809 (home-page "https://github.com/pcmanus/ccm")
2810 (synopsis "Cassandra Cluster Manager for Apache Cassandra clusters on
2811localhost")
2812 (description "Cassandra Cluster Manager is a development tool for testing
2813local Cassandra clusters. It creates, launches and removes Cassandra clusters
2814on localhost.")
2815 (license license:asl2.0)))
2816
2817(define-public python2-ccm
2818 (package-with-python2 python-ccm))
2819
2820(define-public python2-pysqlite
2821 (package
2822 (name "python2-pysqlite")
2823 (version "2.8.3")
2824 (source
2825 (origin
2826 (method url-fetch)
2827 (uri (pypi-uri "pysqlite" version))
2828 (sha256
2829 (base32
2830 "1424gwq9sil2ffmnizk60q36vydkv8rxs6m7xs987kz8cdc37lqp"))))
2831 (build-system python-build-system)
2832 (inputs
2833 `(("sqlite" ,sqlite)))
2834 (arguments
2835 `(#:python ,python-2 ; incompatible with Python 3
2836 #:tests? #f)) ; no test target
2837 (home-page "https://github.com/ghaering/pysqlite")
2838 (synopsis "SQLite bindings for Python")
2839 (description
2840 "Pysqlite provides SQLite bindings for Python that comply to the
2841Database API 2.0T.")
2842 (license license:zlib)))
2843
2844(define-public python-sqlalchemy
2845 (package
2846 (name "python-sqlalchemy")
7969a6ad 2847 (version "1.3.20")
a8714bf6
RW
2848 (source
2849 (origin
2850 (method url-fetch)
aeec4a8f 2851 (uri (pypi-uri "SQLAlchemy" version))
a8714bf6 2852 (sha256
7969a6ad 2853 (base32 "18b9am7bsqc4nj3d2h5r93i002apczxfvpfpcqbd6f0385zmrwnj"))))
a8714bf6
RW
2854 (build-system python-build-system)
2855 (native-inputs
6d04f694 2856 `(("python-cython" ,python-cython) ; for C extensions
a8714bf6 2857 ("python-pytest" ,python-pytest)
6d04f694 2858 ("python-mock" ,python-mock))) ; for tests
a8714bf6
RW
2859 (arguments
2860 `(#:phases
2861 (modify-phases %standard-phases
2862 (replace 'check
9871a896 2863 (lambda _ (invoke "py.test"))))))
5cfe650b 2864 (home-page "https://www.sqlalchemy.org")
a8714bf6
RW
2865 (synopsis "Database abstraction library")
2866 (description
2867 "SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that
2868gives application developers the full power and flexibility of SQL. It
2869provides a full suite of well known enterprise-level persistence patterns,
2870designed for efficient and high-performing database access, adapted into a
2871simple and Pythonic domain language.")
2872 (license license:x11)))
2873
2874(define-public python2-sqlalchemy
2875 (package-with-python2 python-sqlalchemy))
2876
2877(define-public python-sqlalchemy-utils
2878 (package
2879 (name "python-sqlalchemy-utils")
53ae35e4 2880 (version "0.32.21")
a8714bf6
RW
2881 (source
2882 (origin
2883 (method url-fetch)
2884 (uri (pypi-uri "SQLAlchemy-Utils" version))
2885 (sha256
2886 (base32
53ae35e4 2887 "1myn71dn8j74xglyh46f12sh8ywb7j0j732rzwq70kvwwnq32m73"))))
a8714bf6
RW
2888 (build-system python-build-system)
2889 (arguments
2890 '(#:tests? #f)) ; FIXME: Many tests require a running database server.
2891 ;; #:phases
2892 ;; (modify-phases %standard-phases
2893 ;; (replace 'check
2894 ;; (lambda _
2895 ;; (zero? (system* "py.test" "sqlalchemy_utils" "tests")))))
2896 (propagated-inputs
2897 `(("python-six" ,python-six)
2898 ("python-sqlalchemy" ,python-sqlalchemy)))
2899 (native-inputs
2900 `(("python-dateutil" ,python-dateutil)
2901 ("python-flexmock" ,python-flexmock)
2902 ("python-psycopg2" ,python-psycopg2)
2903 ("python-pytest" ,python-pytest)
2904 ("python-pytz" ,python-pytz)))
2905 (home-page "https://github.com/kvesteri/sqlalchemy-utils")
2906 (synopsis "Various utility functions for SQLAlchemy")
2907 (description
2908 "SQLAlchemy-utils provides various utility functions and custom data types
2909for SQLAlchemy. SQLAlchemy is an SQL database abstraction library for Python.
2910
2911You might also want to install the following optional dependencies:
2912@enumerate
2913@item @code{python-passlib}
2914@item @code{python-babel}
2915@item @code{python-cryptography}
2916@item @code{python-pytz}
2917@item @code{python-psycopg2}
2918@item @code{python-furl}
2919@item @code{python-flask-babel}
2920@end enumerate
2921")
2922 (license license:bsd-3)))
2923
2924(define-public python2-sqlalchemy-utils
2925 (package-with-python2 python-sqlalchemy-utils))
2926
de84d3b1
MB
2927(define-public python-alchemy-mock
2928 (package
2929 (name "python-alchemy-mock")
2930 (version "0.4.3")
2931 (home-page "https://github.com/miki725/alchemy-mock")
2932 (source (origin
2933 (method url-fetch)
2934 (uri (pypi-uri "alchemy-mock" version))
2935 (sha256
2936 (base32
2937 "0ylxygl3bcdapzz529n8wgk7vx9gjwb3ism564ypkpd7dbsw653r"))))
2938 (build-system python-build-system)
2939 (arguments
2940 '(#:phases (modify-phases %standard-phases
2941 (replace 'check
2942 (lambda _
2943 ;; Create pytest.ini that adds doctest options to
2944 ;; prevent test failure. Taken from tox.ini.
2945 (call-with-output-file "pytest.ini"
2946 (lambda (port)
2947 (format port "[pytest]
2948doctest_optionflags=IGNORE_EXCEPTION_DETAIL
2949")))
2950 (invoke "pytest" "-vv" "--doctest-modules"
2951 "alchemy_mock/"))))))
2952 (native-inputs
2953 `(("python-mock" ,python-mock)
2954 ("python-pytest" ,python-pytest)))
2955 (propagated-inputs
2956 `(("python-six" ,python-six)
2957 ("python-sqlalchemy" ,python-sqlalchemy)))
2958 (synopsis "Mock helpers for SQLAlchemy")
2959 (description
2960 "This package provides mock helpers for SQLAlchemy that makes it easy
2961to mock an SQLAlchemy session while preserving the ability to do asserts.
2962
2963Normally Normally SQLAlchemy's expressions cannot be easily compared as
2964comparison on binary expression produces yet another binary expression, but
2965this library provides functions to facilitate such comparisons.")
2966 (license license:expat)))
2967
a8714bf6
RW
2968(define-public python-alembic
2969 (package
2970 (name "python-alembic")
63d37b3c 2971 (version "1.4.3")
a8714bf6
RW
2972 (source
2973 (origin
2974 (method url-fetch)
2975 (uri (pypi-uri "alembic" version))
2976 (sha256
63d37b3c 2977 (base32 "0if2dgb088clk738p26bwk50735h6jpd2kacdgc5capv2hiz6d2k"))))
a8714bf6 2978 (build-system python-build-system)
45ebd90c
MB
2979 (arguments
2980 '(#:phases (modify-phases %standard-phases
2981 (replace 'check
2982 (lambda _
2983 (invoke "pytest" "-vv"))))))
a8714bf6
RW
2984 (native-inputs
2985 `(("python-mock" ,python-mock)
2986 ("python-pytest-cov" ,python-pytest-cov)))
2987 (propagated-inputs
2988 `(("python-dateutil" ,python-dateutil)
2989 ("python-sqlalchemy" ,python-sqlalchemy)
2990 ("python-mako" ,python-mako)
2991 ("python-editor" ,python-editor)))
a7f27da7 2992 (home-page "https://bitbucket.org/zzzeek/alembic")
6743080c 2993 (synopsis "Database migration tool for SQLAlchemy")
a8714bf6
RW
2994 (description
2995 "Alembic is a lightweight database migration tool for usage with the
2996SQLAlchemy Database Toolkit for Python.")
2997 (license license:expat)))
2998
2999(define-public python2-alembic
3000 (package-with-python2 python-alembic))
3001
3002(define-public python-pickleshare
3003 (package
3004 (name "python-pickleshare")
f825faa5 3005 (version "0.7.5")
a8714bf6
RW
3006 (source
3007 (origin
3008 (method url-fetch)
ed519b3c 3009 (uri (pypi-uri "pickleshare" version))
a8714bf6 3010 (sha256
f825faa5 3011 (base32 "1jmghg3c53yp1i8cm6pcrm280ayi8621rwyav9fac7awjr3kss47"))))
a8714bf6 3012 (build-system python-build-system)
ff856cfd
MB
3013 (arguments
3014 `(#:phases (modify-phases %standard-phases
3015 (replace 'check
3016 (lambda _
3017 (invoke "pytest"))))))
3018 (native-inputs
3019 `(("python-pytest" ,python-pytest)))
a8714bf6
RW
3020 (home-page "https://github.com/vivainio/pickleshare")
3021 (synopsis "Tiny key value database with concurrency support")
3022 (description
3023 "PickleShare is a small ‘shelve’-like datastore with concurrency support.
3024Like shelve, a PickleShareDB object acts like a normal dictionary. Unlike
3025shelve, many processes can access the database simultaneously. Changing a
3026value in database is immediately visible to other processes accessing the same
3027database. Concurrency is possible because the values are stored in separate
3028files. Hence the “database” is a directory where all files are governed by
3029PickleShare.")
ed519b3c 3030 (properties `((python2-variant . ,(delay python2-pickleshare))))
a8714bf6
RW
3031 (license license:expat)))
3032
3033(define-public python2-pickleshare
ed519b3c
MB
3034 (let ((pickleshare (package-with-python2
3035 (strip-python2-variant python-pickleshare))))
3036 (package (inherit pickleshare)
3037 (propagated-inputs `(("python2-pathlib2" ,python2-pathlib2)
3038 ,@(package-propagated-inputs pickleshare))))))
a8714bf6
RW
3039
3040(define-public python-apsw
3041 (package
3042 (name "python-apsw")
d05e3b08 3043 (version "3.31.1-r1")
a8714bf6
RW
3044 (source
3045 (origin
3046 (method url-fetch)
9930beb8
EF
3047 (uri (string-append "https://github.com/rogerbinns/apsw/releases"
3048 "/download/" version "/apsw-" version ".zip"))
a8714bf6
RW
3049 (sha256
3050 (base32
d05e3b08 3051 "1gap5lr6c7bp134nzvfwr693i6d0fqyaysg3ms2cayjldv616yfx"))))
a8714bf6 3052 (build-system python-build-system)
9930beb8
EF
3053 (native-inputs
3054 `(("unzip" ,unzip)))
a8714bf6 3055 (inputs
c553b08b 3056 `(("sqlite" ,sqlite)))
a8714bf6
RW
3057 (arguments
3058 `(#:phases
3059 (modify-phases %standard-phases
3060 (replace 'build
3061 (lambda _
c553b08b
EF
3062 (invoke "python" "setup.py" "build" "--enable-all-extensions")
3063 #t))
a8714bf6
RW
3064 (add-after 'build 'build-test-helper
3065 (lambda _
c553b08b
EF
3066 (invoke "gcc" "-fPIC" "-shared" "-o" "./testextension.sqlext"
3067 "-I." "-Isqlite3" "src/testextension.c")
3068 #t))
53a9970e 3069 (replace 'check
a8714bf6
RW
3070 (lambda* (#:key inputs outputs #:allow-other-keys)
3071 (add-installed-pythonpath inputs outputs)
c553b08b
EF
3072 (invoke "python" "setup.py" "test")
3073 #t)))))
a8714bf6
RW
3074 (home-page "https://github.com/rogerbinns/apsw/")
3075 (synopsis "Another Python SQLite Wrapper")
3076 (description "APSW is a Python wrapper for the SQLite
3077embedded relational database engine. In contrast to other wrappers such as
3078pysqlite it focuses on being a minimal layer over SQLite attempting just to
3079translate the complete SQLite API into Python.")
3080 (license license:zlib)))
3081
3082(define-public python2-apsw
3083 (package-with-python2 python-apsw))
3084
ba0b249d
LDB
3085(define-public python-aiosqlite
3086 (package
3087 (name "python-aiosqlite")
281fd9ad 3088 (version "0.17.0")
ba0b249d
LDB
3089 (source
3090 (origin
3091 (method url-fetch)
3092 (uri (pypi-uri "aiosqlite" version))
3093 (sha256
3094 (base32
281fd9ad 3095 "0lgfpbkcd730hbgj3zlrbx2y8fzvdns2zj3s4r4l31n49g1arrph"))))
ba0b249d 3096 (build-system python-build-system)
281fd9ad
LDB
3097 (arguments
3098 '(#:phases (modify-phases %standard-phases
3099 (replace 'check
3100 (lambda* (#:key tests? #:allow-other-keys)
3101 (if tests?
3102 (invoke "python" "-m" "unittest" "aiosqlite.tests")
3103 (format #t "test suite not run~%"))
3104 #t)))))
3105 (propagated-inputs
3106 `(("python-typing-extensions" ,python-typing-extensions)))
ba0b249d
LDB
3107 (native-inputs
3108 `(("python-aiounittest" ,python-aiounittest)))
3109 (home-page "https://github.com/jreese/aiosqlite")
3110 (synopsis
3111 "Asyncio bridge for sqlite3")
3112 (description
3113 "The package aiosqlite replicates the standard sqlite3 module, but with
3114async versions of all the standard connection and cursor methods, and context
3115managers for automatically closing connections.")
3116 (license license:expat)))
3117
a8714bf6
RW
3118(define-public python2-neo4j-driver
3119 (package
3120 (name "python2-neo4j-driver")
3121 ;; NOTE: When upgrading to 1.5.0, please add a python3 variant.
3122 (version "1.4.0")
3123 (source (origin
3124 (method url-fetch)
3125 (uri (pypi-uri "neo4j-driver" version))
3126 (sha256
3127 (base32
3128 "011r1vh182p8mm83d8dz9rfnc3l7rf7fd00cyrbyfzi71jmc4g98"))))
3129 (build-system python-build-system)
3130 (arguments
3131 `(#:python ,python-2))
3132 (home-page "https://neo4j.com/developer/python/")
3133 (synopsis "Neo4j driver code written in Python")
3134 (description "This package provides the Neo4j Python driver that connects
3135to the database using Neo4j's binary protocol. It aims to be minimal, while
3136being idiomatic to Python.")
3137 (license license:asl2.0)))
3138
3139(define-public python2-py2neo
3140 (package
3141 (name "python2-py2neo")
3142 (version "3.1.2")
3143 (source (origin
3144 (method url-fetch)
3145 (uri (pypi-uri "py2neo" version))
3146 (sha256
3147 (base32
3148 "1f1q95vqcvlc3nsc33p841swnjdcjazddlq2dzi3qfnjqjrajxw1"))))
3149 (build-system python-build-system)
3150 (arguments
3151 `(#:python ,python-2))
1084e86b 3152 (home-page "https://py2neo.org")
a8714bf6
RW
3153 (synopsis "Library and toolkit for working with Neo4j in Python")
3154 (description "This package provides a client library and toolkit for
3155working with Neo4j from within Python applications and from the command
3156line. The core library has no external dependencies and has been carefully
3157designed to be easy and intuitive to use.")
3158 (license license:asl2.0)))
3159
3160(define-public python-psycopg2
3161 (package
3162 (name "python-psycopg2")
dc2f0e70 3163 (version "2.8.6")
a8714bf6
RW
3164 (source
3165 (origin
3166 (method url-fetch)
3167 (uri (pypi-uri "psycopg2" version))
3168 (sha256
dc2f0e70 3169 (base32 "0hzmk6b1hb5riqkljr5xics6p4zbvmis6knbczb7zhq7273zc8zv"))))
a8714bf6
RW
3170 (build-system python-build-system)
3171 (arguments
3172 ;; Tests would require a postgresql database "psycopg2_test"
3173 ;; and a running postgresql database management service.
3174 `(#:tests? #f)) ; TODO re-enable after providing a test-db.
3175 (inputs
3176 `(("postgresql" ,postgresql))) ; libpq
3177 (home-page "http://initd.org/psycopg/")
3178 (synopsis "Python PostgreSQL adapter")
3179 (description
19601e89
BW
3180 "psycopg2 is a thread-safe PostgreSQL adapter that implements DB-API
31812.0.")
a8714bf6
RW
3182 (license license:lgpl3+)))
3183
3184(define-public python2-psycopg2
3185 (package-with-python2 python-psycopg2))
3186
3187(define-public python-sadisplay
3188 (package
3189 (name "python-sadisplay")
bcdc5cae 3190 (version "0.4.8")
a8714bf6
RW
3191 (source
3192 (origin
3193 (method url-fetch)
3194 (uri (pypi-uri "sadisplay" version))
3195 (sha256
3196 (base32
bcdc5cae 3197 "01d9lxhmgpb68gy8rd6zj6fcwp84n2qq210n1qsk3qbsir79bzh4"))))
a8714bf6
RW
3198 (build-system python-build-system)
3199 (propagated-inputs
3200 `(("python-sqlalchemy" ,python-sqlalchemy)))
3201 (native-inputs
bcdc5cae 3202 ;; For tests.
a8714bf6
RW
3203 `(("python-nose" ,python-nose)))
3204 (home-page "https://bitbucket.org/estin/sadisplay")
3205 (synopsis "SQLAlchemy schema displayer")
3206 (description "This package provides a program to build Entity
3207Relationship diagrams from a SQLAlchemy model (or directly from the
3208database).")
3209 (license license:bsd-3)))
3210
3211(define-public python2-sadisplay
3212 (package-with-python2 python-sadisplay))
3213
945ec6c3
VM
3214(define-public yoyo-migrations
3215 (package
3216 (name "yoyo-migrations")
3217 (version "7.2.0")
3218 (source
3219 (origin
3220 ;; We use the upstream repository, as the tests are not included in the
3221 ;; PyPI releases.
3222 (method hg-fetch)
3223 (uri (hg-reference
3224 (url "https://hg.sr.ht/~olly/yoyo")
3225 (changeset (string-append "v" version "-release"))))
3226 (file-name (string-append name "-" version "-checkout"))
3227 (sha256
3228 (base32 "0q2z9bgdj3wyix7yvqsayfs21grp5av8ilh411lgmjhigszkvhcq"))))
3229 (build-system python-build-system)
3230 (arguments
3231 ;; XXX: Tests require a connection to some pgsql database and psycopg
3232 ;; fails to connect to it.
3233 '(#:tests? #f))
3234 (propagated-inputs
3235 `(("python-sqlparse" ,python-sqlparse)
3236 ("python-tabulate" ,python-tabulate)))
3237 (home-page "https://ollycope.com/software/yoyo/latest/")
3238 (synopsis "Database migrations with SQL")
3239 (description
3240 "Yoyo is a database schema migration tool. Migrations are written as SQL
3241files or Python scripts that define a list of migration steps.")
3242 (license license:asl2.0)))
3243
a8714bf6
RW
3244(define-public python-mysqlclient
3245 (package
3246 (name "python-mysqlclient")
5ec1feca 3247 (version "2.0.1")
a8714bf6
RW
3248 (source
3249 (origin
3250 (method url-fetch)
3251 (uri (pypi-uri "mysqlclient" version))
3252 (sha256
3253 (base32
5ec1feca 3254 "1rf5l8hazs3v18hmcrm90z3hi9wxv553ipwd5l6kj8j7l6p7abzv"))))
a8714bf6 3255 (build-system python-build-system)
eec6a694 3256 (arguments '(#:tests? #f)) ;XXX: requires a live database
a8714bf6 3257 (inputs
997abda9 3258 `(("mysql-dev" ,mariadb "dev")))
a8714bf6
RW
3259 (home-page "https://github.com/PyMySQL/mysqlclient-python")
3260 (synopsis "MySQLdb is an interface to the popular MySQL database server for Python")
3261 (description "MySQLdb is an interface to the popular MySQL database server
3262for Python. The design goals are:
3263@enumerate
3264@item Compliance with Python database API version 2.0 [PEP-0249],
3265@item Thread-safety,
3266@item Thread-friendliness (threads will not block each other).
3267@end enumerate")
3268 (license license:gpl2)))
3269
a8714bf6
RW
3270(define-public python-hiredis
3271 (package
3272 (name "python-hiredis")
3273 (version "0.2.0")
3274 (source
3275 (origin
3276 (method url-fetch)
3277 (uri (pypi-uri "hiredis" version))
3278 (sha256
3279 (base32
3280 "1dfm2k9l9zar9nw9fwmm74zrgraxdxs04vx9li56fjcf289qx5fa"))))
3281 (build-system python-build-system)
3282 (arguments
3283 ;; no tests
3284 `(#:tests? #f))
3285 (home-page "https://github.com/redis/hiredis-py")
3286 (synopsis "Python extension that wraps protocol parsing code in hiredis")
3287 (description "Python-hiredis is a python extension that wraps protocol
3288parsing code in hiredis. It primarily speeds up parsing of multi bulk replies.")
3289 (license license:bsd-3)))
3290
3291(define-public python2-hiredis
3292 (package-with-python2 python-hiredis))
3293
3294(define-public python-fakeredis
3295 (package
3296 (name "python-fakeredis")
1655e7be 3297 (version "1.2.1")
a8714bf6
RW
3298 (source
3299 (origin
3300 (method url-fetch)
3301 (uri (pypi-uri "fakeredis" version))
3302 (sha256
3303 (base32
1655e7be 3304 "1s12mn4q4hz7402139khn9fx56kibj7nn0d6w81hn0zs07b90wpc"))))
a8714bf6
RW
3305 (build-system python-build-system)
3306 (arguments
3307 ;; no tests
3308 `(#:tests? #f))
1655e7be
TLC
3309 (propagated-inputs
3310 `(("python-sortedcontainers" ,python-sortedcontainers)))
a8714bf6
RW
3311 (home-page "https://github.com/jamesls/fakeredis")
3312 (synopsis "Fake implementation of redis API for testing purposes")
a4764ff0
TGR
3313 (description
3314 "Fakeredis is a pure-Python implementation of the redis-py Python client
3315that simulates talking to a redis server. It was created for a single purpose:
3316to write unit tests.
3317
3318Setting up redis is not hard, but one often wants to write unit tests that don't
3319talk to an external server such as redis. This module can be used as a
3320reasonable substitute.")
a8714bf6
RW
3321 (license license:bsd-3)))
3322
3323(define-public python2-fakeredis
3324 (package-with-python2 python-fakeredis))
3325
3326(define-public python-redis
3327 (package
3328 (name "python-redis")
d87252e6 3329 (version "3.5.3")
a8714bf6
RW
3330 (source
3331 (origin
3332 (method url-fetch)
3333 (uri (pypi-uri "redis" version))
3334 (sha256
d87252e6 3335 (base32 "18h5b87g15x3j6pb1h2q27ri37p2qpvc9n2wgn5yl3b6m3y0qzhf"))))
a8714bf6 3336 (build-system python-build-system)
a263a976 3337 ;; Tests require a running Redis server.
a8714bf6
RW
3338 (arguments '(#:tests? #f))
3339 ;; As long as we are not running test, we do not need this input :-)
3340 ;;(native-inputs
3341 ;; `(("python-pytest" ,python-pytest)))
3342 (home-page "https://github.com/andymccurdy/redis-py")
3343 (synopsis "Redis Python client")
3344 (description
3345 "This package provides a Python interface to the Redis key-value store.")
3346 (license license:expat)))
3347
3348(define-public python2-redis
3349 (package-with-python2 python-redis))
3350
3351(define-public python-rq
3352 (package
3353 (name "python-rq")
4436a27c 3354 (version "1.5.2")
a8714bf6
RW
3355 (source
3356 (origin
b462caaf
MB
3357 (method git-fetch)
3358 (uri (git-reference
3359 (url "https://github.com/rq/rq")
3360 (commit (string-append "v" version))))
3361 (file-name (git-file-name name version))
a8714bf6 3362 (sha256
4436a27c 3363 (base32 "0ikqmpq0g1qiqwd7ar1286l4hqjb6aj2wr844gihhb8ijzwhp8va"))))
a8714bf6 3364 (build-system python-build-system)
b462caaf
MB
3365 (arguments
3366 '(#:phases (modify-phases %standard-phases
3367 (add-before 'check 'start-redis
3368 (lambda _
3369 (invoke "redis-server" "--daemonize" "yes")))
3370 (replace 'check
3371 (lambda* (#:key outputs #:allow-other-keys)
3372 (let ((out (assoc-ref outputs "out")))
3373 ;; Drop test that needs the SDK for Sentry.io.
3374 (delete-file "tests/test_sentry.py")
3375 ;; Ensure 'rq' and 'rqworker' ends up on PATH.
3376 (setenv "PATH" (string-append out "/bin:"
3377 (getenv "PATH")))
3378 (invoke "pytest" "-vv")))))))
3379 (native-inputs
3380 `(("python-mock" ,python-mock)
3381 ("python-pytest" ,python-pytest)
3382 ("redis" ,redis)))
a8714bf6
RW
3383 (propagated-inputs
3384 `(("python-click" ,python-click)
3385 ("python-redis" ,python-redis)))
4e5ad79e 3386 (home-page "https://python-rq.org/")
a8714bf6
RW
3387 (synopsis "Simple job queues for Python")
3388 (description
3389 "RQ (Redis Queue) is a simple Python library for queueing jobs and
3390processing them in the background with workers. It is backed by Redis and it
3391is designed to have a low barrier to entry.")
3392 (license license:bsd-2)))
3393
8a88efce
MB
3394(define-public python-rq-scheduler
3395 (package
3396 (name "python-rq-scheduler")
3397 (version "0.10.0")
3398 (home-page "https://github.com/rq/rq-scheduler")
3399 (source (origin
3400 (method git-fetch)
3401 (uri (git-reference
3402 (url home-page)
3403 (commit (string-append "v" version))))
3404 (file-name (git-file-name name version))
3405 (sha256
3406 (base32
3407 "0xg6yazqs5kbr2ayvhvljs1h5vgx5k5dds613fmhswln7gglf9hk"))))
3408 (build-system python-build-system)
3409 (arguments
3410 '(#:phases (modify-phases %standard-phases
3411 (add-before 'check 'start-redis
3412 (lambda _
3413 (invoke "redis-server" "--daemonize" "yes")))
3414 (replace 'check
3415 (lambda _
3416 (substitute* "run_tests.py"
3417 (("/usr/bin/env")
3418 (which "env")))
3419 (invoke "./run_tests.py"))))))
3420 (native-inputs
3421 `(("redis" ,redis)
3422 ("which" ,which)))
3423 (propagated-inputs
3424 `(("python-croniter" ,python-croniter)
3425 ("python-rq" ,python-rq)))
3426 (synopsis "Job scheduling capabilities for RQ (Redis Queue)")
3427 (description
3428 "This package provides job scheduling capabilities to @code{python-rq}
3429(Redis Queue).")
3430 (license license:expat)))
3431
a8714bf6
RW
3432(define-public python-trollius-redis
3433 (package
3434 (name "python-trollius-redis")
3435 (version "0.1.4")
3436 (source
3437 (origin
3438 (method url-fetch)
3439 (uri (pypi-uri "trollius_redis" version))
3440 (sha256
3441 (base32
3442 "0k3vypszmgmaipgw9xscvgm79h2zd6p6ci8gdp5sxl6g5kbqr9fy"))))
3443 (build-system python-build-system)
3444 ;; TODO: Tests require packaging 'hiredis'.
3445 (arguments '(#:tests? #f))
3446 (home-page "https://github.com/benjolitz/trollius-redis")
3447 (synopsis "Port of asyncio-redis to trollius")
3448 (description "@code{trollius-redis} is a Redis client for Python
d087a3a6 3449 trollius. It is an asynchronous IO (PEP 3156) implementation of the
a8714bf6
RW
3450 Redis protocol.")
3451 (license license:bsd-2)))
3452
3453(define-public python2-trollius-redis
3454 (package-with-python2 python-trollius-redis))
3455
3456(define-public python-sqlparse
3457 (package
3458 (name "python-sqlparse")
d343e0fe 3459 (version "0.3.1")
a8714bf6
RW
3460 (source (origin
3461 (method url-fetch)
3462 (uri (pypi-uri "sqlparse" version))
3463 (sha256
3464 (base32
d343e0fe 3465 "0j652a6z7bdf6c77aczfn8m8b2nsr1bcqq48wzghf8vi6wvj0qp1"))))
a8714bf6
RW
3466 (build-system python-build-system)
3467 (arguments
3468 `(#:phases
3469 (modify-phases %standard-phases
3470 (replace 'check
96272e28 3471 (lambda _ (invoke "py.test"))))))
a8714bf6
RW
3472 (native-inputs
3473 `(("python-pytest" ,python-pytest)))
3474 (home-page "https://github.com/andialbrecht/sqlparse")
3475 (synopsis "Non-validating SQL parser")
3476 (description "Sqlparse is a non-validating SQL parser for Python. It
3477provides support for parsing, splitting and formatting SQL statements.")
3478 (license license:bsd-3)))
3479
3480(define-public python2-sqlparse
3481 (package-with-python2 python-sqlparse))
3482
3483(define-public python-sql
3484 (package
3485 (name "python-sql")
909404b5 3486 (version "1.0.0")
a8714bf6
RW
3487 (source
3488 (origin
3489 (method url-fetch)
3490 (uri (pypi-uri "python-sql" version))
3491 (sha256
909404b5 3492 (base32 "05ni936y0ia9xmryl7mlhbj9i80nnvq1bi4zxhb96rv7yvpb3fqb"))))
a8714bf6
RW
3493 (build-system python-build-system)
3494 (home-page "https://python-sql.tryton.org/")
3495 (synopsis "Library to write SQL queries in a pythonic way")
3496 (description "@code{python-sql} is a library to write SQL queries, that
3497transforms idiomatic python function calls to well-formed SQL queries.")
3498 (license license:bsd-3)))
3499
3500(define-public python2-sql
3501 (package-with-python2 python-sql))
33c88fcb 3502
c8fdf86d
LDB
3503(define-public python-pypika
3504 (package
3505 (name "python-pypika")
f73ee73d 3506 (version "0.47.6")
c8fdf86d 3507 (source
510472f8
LDB
3508 (origin (method git-fetch)
3509 (uri (git-reference
b0e7b699 3510 (url "https://github.com/kayak/pypika")
510472f8
LDB
3511 (commit (string-append "v" version))))
3512 (file-name (git-file-name name version))
3513 (sha256
3514 (base32
f73ee73d 3515 "001pg36sw9a36zdd1kccbymcxndphjcjbbrsy6ri7ng8h4dgz549"))))
c8fdf86d
LDB
3516 (build-system python-build-system)
3517 (native-inputs
3518 `(("python-parameterized" ,python-parameterized)))
3519 (home-page "https://github.com/kayak/pypika")
3520 (synopsis "SQL query builder API for Python")
3521 (description
3522 "PyPika is a python SQL query builder that exposes the full richness of
3523the SQL language using a syntax that reflects the resulting query.")
3524 (license license:asl2.0)))
3525
a50628bb
KCB
3526;; There are many wrappers for this in other languages. When touching, please
3527;; be sure to ensure all dependencies continue to build.
dae7661a
LF
3528(define-public apache-arrow
3529 (package
3530 (name "apache-arrow")
9757e546 3531 (version "3.0.0")
dae7661a 3532 (source
a50628bb
KCB
3533 (origin
3534 (method git-fetch)
3535 (uri (git-reference
3536 (url "https://github.com/apache/arrow")
3537 (commit (string-append "apache-arrow-" version))))
3538 (file-name (git-file-name name version))
3539 (sha256
3540 (base32
9757e546 3541 "03ngddh3r1g6f9aja2jlfksgvgyzmxmfy4bxvzjrcv5fvl5x8ii0"))))
dae7661a
LF
3542 (build-system cmake-build-system)
3543 (arguments
3544 `(#:tests? #f
3545 #:phases
3546 (modify-phases %standard-phases
3547 (add-before 'configure 'enter-source-directory
3548 (lambda _ (chdir "cpp") #t))
3549 (add-after 'unpack 'set-env
3550 (lambda _
3551 (setenv "BOOST_ROOT" (assoc-ref %build-inputs "boost"))
3552 (setenv "BROTLI_HOME" (assoc-ref %build-inputs "brotli"))
3553 (setenv "FLATBUFFERS_HOME" (assoc-ref %build-inputs "flatbuffers"))
dae7661a
LF
3554 (setenv "RAPIDJSON_HOME" (assoc-ref %build-inputs "rapidjson"))
3555 #t)))
3def739d 3556 #:build-type "Release"
dae7661a 3557 #:configure-flags
3def739d 3558 (list "-DARROW_PYTHON=ON"
a50628bb
KCB
3559 "-DARROW_GLOG=ON"
3560 ;; Parquet options
3561 "-DARROW_PARQUET=ON"
3562 "-DPARQUET_BUILD_EXECUTABLES=ON"
3563 ;; The maintainers disallow using system versions of
3564 ;; jemalloc:
3565 ;; https://issues.apache.org/jira/browse/ARROW-3507. This
3566 ;; is unfortunate because jemalloc increases performance:
3567 ;; https://arrow.apache.org/blog/2018/07/20/jemalloc/.
3568 "-DARROW_JEMALLOC=OFF"
3569
3570 ;; The CMake option ARROW_DEPENDENCY_SOURCE is a global
3571 ;; option that instructs the build system how to resolve
3572 ;; each dependency. SYSTEM = Finding the dependency in
3573 ;; system paths using CMake's built-in find_package
3574 ;; function, or using pkg-config for packages that do not
3575 ;; have this feature
3576 "-DARROW_DEPENDENCY_SOURCE=SYSTEM"
3577
3578 ;; Split output into its component packages.
3579 (string-append "-DCMAKE_INSTALL_PREFIX="
3580 (assoc-ref %outputs "lib"))
3581 (string-append "-DCMAKE_INSTALL_RPATH="
3582 (assoc-ref %outputs "lib")
dae7661a 3583 "/lib")
a50628bb
KCB
3584 (string-append "-DCMAKE_INSTALL_BINDIR="
3585 (assoc-ref %outputs "out")
3586 "/bin")
3587 (string-append "-DCMAKE_INSTALL_INCLUDEDIR="
3588 (assoc-ref %outputs "include")
3589 "/share/include")
3590
3591
3592 "-DARROW_WITH_SNAPPY=ON"
3593 "-DARROW_WITH_ZLIB=ON"
3594 "-DARROW_WITH_ZSTD=ON"
3595 "-DARROW_WITH_LZ4=ON"
3596 "-DARROW_COMPUTE=ON"
3597 "-DARROW_CSV=ON"
3598 "-DARROW_DATASET=ON"
3599 "-DARROW_FILESYSTEM=ON"
3600 "-DARROW_HDFS=ON"
3601 "-DARROW_JSON=ON"
3602 ;; Arrow Python C++ integration library (required for
3603 ;; building pyarrow). This library must be built against
3604 ;; the same Python version for which you are building
3605 ;; pyarrow. NumPy must also be installed. Enabling this
3606 ;; option also enables ARROW_COMPUTE, ARROW_CSV,
3607 ;; ARROW_DATASET, ARROW_FILESYSTEM, ARROW_HDFS, and
3608 ;; ARROW_JSON.
3609 "-DARROW_PYTHON=ON"
dae7661a
LF
3610
3611 ;; Building the tests forces on all the
3612 ;; optional features and the use of static
3613 ;; libraries.
3614 "-DARROW_BUILD_TESTS=OFF"
a50628bb
KCB
3615 "-DBENCHMARK_ENABLE_GTEST_TESTS=OFF"
3616 ;;"-DBENCHMARK_ENABLE_TESTING=OFF"
dae7661a
LF
3617 "-DARROW_BUILD_STATIC=OFF")))
3618 (inputs
23af76f1
GH
3619 `(("apache-thrift" ,apache-thrift "lib")
3620 ("boost" ,boost)
dae7661a 3621 ("brotli" ,google-brotli)
23af76f1 3622 ("bzip2" ,bzip2)
a50628bb 3623 ("double-conversion" ,double-conversion)
a50628bb
KCB
3624 ("gflags" ,gflags)
3625 ("glog" ,glog)
23af76f1
GH
3626 ("grpc" ,grpc)
3627 ("lz4" ,lz4)
a50628bb 3628 ("protobuf" ,protobuf)
23af76f1
GH
3629 ("python-3" ,python)
3630 ("python-numpy" ,python-numpy)
a50628bb 3631 ("rapidjson" ,rapidjson)
a50628bb 3632 ("re2" ,re2)
23af76f1 3633 ("snappy" ,snappy)
9757e546 3634 ("utf8proc" ,utf8proc)
23af76f1
GH
3635 ("zlib" ,zlib)
3636 ("zstd" ,zstd "lib")))
a50628bb
KCB
3637 (native-inputs
3638 `(("pkg-config" ,pkg-config)))
3639 (outputs '("out" "lib" "include"))
dae7661a
LF
3640 (home-page "https://arrow.apache.org/")
3641 (synopsis "Columnar in-memory analytics")
3642 (description "Apache Arrow is a columnar in-memory analytics layer
a50628bb 3643designed to accelerate big data. It houses a set of canonical in-memory
dae7661a 3644representations of flat and hierarchical data along with multiple
a50628bb 3645language-bindings for structure manipulation. It also provides IPC and common
dae7661a
LF
3646algorithm implementations.")
3647 (license license:asl2.0)))
5e5ac710
LF
3648
3649(define-public python-pyarrow
3650 (package
a50628bb 3651 (inherit apache-arrow)
5e5ac710 3652 (name "python-pyarrow")
5e5ac710
LF
3653 (build-system python-build-system)
3654 (arguments
a50628bb 3655 '(#:tests? #f ; XXX There are no tests in the "python" directory
5e5ac710
LF
3656 #:phases
3657 (modify-phases %standard-phases
0fa926c2 3658 (delete 'build) ; XXX the build is performed again during the install phase
5e5ac710
LF
3659 (add-after 'unpack 'enter-source-directory
3660 (lambda _ (chdir "python") #t))
a50628bb 3661 (add-after 'unpack 'make-git-checkout-writable
5e5ac710 3662 (lambda _
a50628bb 3663 (for-each make-file-writable (find-files "."))
5e5ac710
LF
3664 #t)))))
3665 (propagated-inputs
a50628bb 3666 `(("apache-arrow" ,apache-arrow "lib")
5e5ac710
LF
3667 ("python-numpy" ,python-numpy)
3668 ("python-pandas" ,python-pandas)
3669 ("python-six" ,python-six)))
3670 (native-inputs
c69959f0 3671 `(("cmake" ,cmake-minimal)
a50628bb 3672 ("pkg-config" ,pkg-config)
5e5ac710
LF
3673 ("python-cython" ,python-cython)
3674 ("python-pytest" ,python-pytest)
0fa926c2 3675 ("python-pytest-runner" ,python-pytest-runner)
5e5ac710 3676 ("python-setuptools-scm" ,python-setuptools-scm)))
a50628bb 3677 (outputs '("out"))
5e5ac710
LF
3678 (home-page "https://arrow.apache.org/docs/python/")
3679 (synopsis "Python bindings for Apache Arrow")
a50628bb
KCB
3680 (description
3681 "This library provides a Pythonic API wrapper for the reference Arrow C++
3682implementation, along with tools for interoperability with pandas, NumPy, and
3683other traditional Python scientific computing packages.")
5e5ac710
LF
3684 (license license:asl2.0)))
3685
450d5dc2
PL
3686(define-public python-crate
3687 (package
3688 (name "python-crate")
19181820 3689 (version "0.23.2")
450d5dc2
PL
3690 (source (origin
3691 (method url-fetch)
3692 (uri (pypi-uri "crate" version))
3693 (sha256
3694 (base32
19181820 3695 "0ngmlvi320c5gsxab0s7qgq0ck4jdlcwvb6lbjhnfprafdp56vvx"))))
450d5dc2
PL
3696 (build-system python-build-system)
3697 (propagated-inputs
3698 `(("python-urllib3" ,python-urllib3)))
3699 (home-page "https://github.com/crate/crate-python")
3700 (synopsis "CrateDB Python client")
3701 (description
3702 "This package provides a Python client library for CrateDB.
3703It implements the Python DB API 2.0 specification and includes support for
3704SQLAlchemy.")
3705 (license license:asl2.0)))
ae8a0184
GLV
3706
3707(define-public libdbi
3708 (package
3709 (name "libdbi")
3710 (version "0.9.0")
3711 (source (origin
3712 (method url-fetch)
3713 (uri (string-append "mirror://sourceforge/libdbi/libdbi/libdbi-"
3714 version "/libdbi-" version ".tar.gz"))
3715 (sha256
3716 (base32
3717 "00s5ra7hdlq25iv23nwf4h1v3kmbiyzx0v9bhggjiii4lpf6ryys"))))
3718 (build-system gnu-build-system)
3719 (synopsis "Database independent abstraction layer in C")
3720 (description
3721 "This library implements a database independent abstraction layer in C,
3722similar to the DBI/DBD layer in Perl. Writing one generic set of code,
3723programmers can leverage the power of multiple databases and multiple
3724simultaneous database connections by using this framework.")
3725 (home-page "http://libdbi.sourceforge.net/")
3726 (license license:lgpl2.1+)))
df81de86
GLV
3727
3728(define-public libdbi-drivers
3729 (package
3730 (name "libdbi-drivers")
3731 (version "0.9.0")
3732 (source (origin
3733 (method url-fetch)
3734 (uri (string-append "mirror://sourceforge/libdbi-drivers/"
3735 "libdbi-drivers/libdbi-drivers-" version
3736 "/libdbi-drivers-" version ".tar.gz"))
3737 (sha256
3738 (base32
3739 "0m680h8cc4428xin4p733azysamzgzcmv4psjvraykrsaz6ymlj3"))))
3740 (build-system gnu-build-system)
3741 (native-inputs
9077cf68
MB
3742 `(;; For tests.
3743 ("inetutils" ,inetutils)
3744 ("glibc-locales" ,glibc-locales)
ca69163c 3745 ("mariadb" ,mariadb)))
df81de86
GLV
3746 (inputs
3747 `(("libdbi" ,libdbi)
9077cf68
MB
3748 ("mariadb:dev" ,mariadb "dev")
3749 ("mariadb:lib" ,mariadb "lib")
df81de86
GLV
3750 ("postgresql" ,postgresql)
3751 ("sqlite" ,sqlite)))
3752 (arguments
3753 `(#:configure-flags
3754 (let ((libdbi (assoc-ref %build-inputs "libdbi"))
9077cf68
MB
3755 (mysql:inc (assoc-ref %build-inputs "mariadb:dev"))
3756 (mysql:lib (assoc-ref %build-inputs "mariadb:lib"))
df81de86
GLV
3757 (postgresql (assoc-ref %build-inputs "postgresql"))
3758 (sqlite (assoc-ref %build-inputs "sqlite")))
3759 (list "--disable-docs"
3760 (string-append "--with-dbi-incdir=" libdbi "/include")
3761 (string-append "--with-dbi-libdir=" libdbi "/lib")
3762 "--with-mysql"
9077cf68
MB
3763 (string-append "--with-mysql-incdir=" mysql:inc "/include/mysql")
3764 (string-append "--with-mysql-libdir=" mysql:lib "/lib")
df81de86
GLV
3765 "--with-pgsql"
3766 (string-append "--with-pgsql-incdir=" postgresql "/include")
3767 (string-append "--with-pgsql-libdir=" postgresql "/lib")
3768 "--with-sqlite3"
3769 (string-append "--with-sqlite-incdir=" sqlite "/include")
3770 (string-append "--with-sqlite-libdir=" sqlite "/lib")))
4e902da6 3771 #:tests? #f ; FIXME: Find why the tests get stuck forever.
df81de86
GLV
3772 #:phases
3773 (modify-phases %standard-phases
3774 (add-after 'unpack 'fix-tests
3775 (lambda* (#:key inputs #:allow-other-keys)
3776 (substitute* "tests/test_mysql.sh"
3777 (("^MYMYSQLD=.*")
3778 (string-append "MYMYSQLD="
9077cf68 3779 (assoc-ref inputs "mariadb")
df81de86
GLV
3780 "/bin/mysqld")))
3781 #t))
3782 (add-after 'install 'remove-empty-directories
3783 (lambda* (#:key outputs #:allow-other-keys)
3784 (let ((var (string-append (assoc-ref outputs "out") "/var")))
3785 (delete-file-recursively var))
3786 #t)))))
3787 (synopsis "Database drivers for the libdbi framework")
3788 (description
3789 "The @code{libdbi-drivers} library provides the database specific drivers
3790for the @code{libdbi} framework.
3791
3792The drivers officially supported by @code{libdbi} are:
3793@itemize
3794@item MySQL,
3795@item PostgreSQL,
3796@item SQLite.
3797@end itemize")
3798 (home-page "http://libdbi-drivers.sourceforge.net/")
3799 (license license:lgpl2.1+)))
6d26ee3b
PN
3800
3801(define-public soci
3802 (package
3803 (name "soci")
d8fe4554 3804 (version "4.0.1")
6d26ee3b
PN
3805 (source (origin
3806 (method git-fetch)
3807 (uri (git-reference
3808 (url "https://github.com/SOCI/soci/")
3809 (commit version)))
3810 (file-name (git-file-name name version))
3811 (sha256
3812 (base32
d8fe4554 3813 "14x2gjblkgpflv75wl144cyjp1sis5rbxnr9r2gj3yw16v2av0bp"))))
6d26ee3b 3814 (build-system cmake-build-system)
ac6e19b0
RG
3815 (propagated-inputs
3816 ;; Headers of soci has include-references to headers of these inputs.
691c4185
TGR
3817 `(("firebird" ,firebird)
3818 ("postgresql" ,postgresql)
6d26ee3b
PN
3819 ("sqlite" ,sqlite)
3820 ("odbc" ,unixodbc)
3821 ("boost" ,boost)
997abda9 3822 ("mariadb:dev" ,mariadb "dev")))
6d26ee3b 3823 (arguments
d8fe4554
TGR
3824 `(#:configure-flags
3825 ;; C++11 (-DSOCI_CXX11) is OFF by default. hyperledger-iroha needs it.
28da3c19
TGR
3826 (list "-DCMAKE_CXX_STANDARD=17"
3827 "-DSOCI_LIBDIR=lib")
3828 #:tests? #f)) ; may require running database management systems
6d26ee3b
PN
3829 (synopsis "C++ Database Access Library")
3830 (description
3831 "SOCI is an abstraction layer for several database backends, including
3832PostreSQL, SQLite, ODBC and MySQL.")
3833 (home-page "http://soci.sourceforge.net/")
3834 (license license:boost1.0)))
0c0a2831
SH
3835
3836(define-public freetds
3837 (package
3838 (name "freetds")
bf5f7585 3839 (version "1.2.20")
0c0a2831
SH
3840 (source
3841 (origin
3842 (method url-fetch)
3843 (uri (string-append "https://www.freetds.org/files/stable/"
3844 "freetds-" version ".tar.gz"))
3845 (sha256
bf5f7585 3846 (base32 "11fzwcahc1bc8npxbif0448v9cwyf7k04167i7fcspmfw7a0hj0d"))))
0c0a2831
SH
3847 (build-system gnu-build-system)
3848 (arguments
3849 ;; NOTE: (Sharlatan-20210110213908+0000) some tests require DB connection,
3850 ;; disabled for now.
3851 `(#:tests? #f))
3852 (home-page "https://www.freetds.org/")
3853 (synopsis "Client libraries for MS SQL and Sybase servers")
3854 (description
3855 "FreeTDS is an implementation of the Tabular DataStream protocol, used for
3856connecting to MS SQL and Sybase servers over TCP/IP.")
3857 (license license:lgpl2.0+)))