WIP: bees service
[jackhill/guix/guix.git] / gnu / packages / databases.scm
index aa64507..2353e3b 100644 (file)
 ;;; Copyright © 2017, 2018 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017, 2018 Pierre Langlois <pierre.langlois@gmx.com>
-;;; Copyright © 2015, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2017, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Kristofer Buffington <kristoferbuffington@gmail.com>
 ;;; Copyright © 2018 Amirouche Boubekki <amirouche@hypermove.net>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
-;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>
@@ -48,6 +48,7 @@
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2021 David Larsson <david.larsson@selfhosted.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
 either single machines or networked clusters.")
     (license license:gpl3+)))
 
-(define-public go-gopkg.in-mgo.v2
-  (package
-    (name "go-gopkg.in-mgo.v2")
-    (version "2016.08.01")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/go-mgo/mgo")
-                    (commit (string-append "r" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0rwbi1z63w43b0z9srm8m7iz1fdwx7bq7n2mz862d6liiaqa59jd"))))
-    (build-system go-build-system)
-    (arguments
-     `(#:import-path "gopkg.in/mgo.v2"
-       ;; TODO: The tests fail as MongoDB fails to start
-       ;; Error parsing command line: unrecognised option '--chunkSize'
-       #:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'reset-gzip-timestamps)
-         (add-before 'check 'start-mongodb
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (with-directory-excursion "src/gopkg.in/mgo.v2"
-                 (invoke "make" "startdb")))
-             #t))
-         (add-after 'check 'stop'mongodb
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (with-directory-excursion "src/gopkg.in/mgo.v2"
-                 (invoke "make" "stopdb")))
-             #t)))))
-    (native-inputs
-     `(("go-gopkg.in-check.v1" ,go-gopkg.in-check.v1)
-       ("mongodb" ,mongodb)
-       ("daemontools" ,daemontools)))
-    (synopsis "@code{mgo} offers a rich MongoDB driver for Go.")
-    (description
-     "@code{mgo} (pronounced as mango) is a MongoDB driver for the Go language.
-It implements a rich selection of features under a simple API following
-standard Go idioms.")
-    (home-page "https://labix.org/mgo")
-    (license license:bsd-2)))
-
 (define-public ephemeralpg
   (package
     (name "ephemeralpg")
@@ -572,7 +527,8 @@ applications.")
        ("cyrus-sasl" ,cyrus-sasl)))
     (outputs '("out" "doc"))
     (arguments
-     '(#:phases
+     '(#:tests? #f                      ;many tests fail and use too much time
+       #:phases
        (modify-phases %standard-phases
          (add-before 'bootstrap 'fix-configure.ac
            ;; Move the AC_CONFIG_AUX_DIR macro use under AC_INIT, otherwise we
@@ -584,24 +540,9 @@ applications.")
              (delete-file "bootstrap.sh") ;not useful in the context of Guix
              (substitute* "configure.ac"
                (("^AC_CONFIG_AUX_DIR\\(\\[build-aux\\]\\).*") "")
-               (("(^AC_INIT.*)" anchor)
-                (string-append anchor "AC_CONFIG_AUX_DIR([build-aux])\n")))
-             #t))
-         (add-before 'bootstrap 'disable-failing-tests
-           ;; See: https://bugs.launchpad.net/libmemcached/+bug/1803926
-           (lambda _
-             ;; Mark some heavily failing test suites as expected to fail.
-             (substitute* "Makefile.am"
-               (("(XFAIL_TESTS =[^\n]*)" xfail_tests)
-                (string-append xfail_tests " tests/testudp"
-                               " tests/libmemcached-1.0/testapp"
-                               " tests/libmemcached-1.0/testsocket")))
-             ;; Disable two tests of the unittest test suite.
-             (substitute* "libtest/unittest.cc"
-               ((".*echo_fubar_BINARY \\},.*") "")
-               ((".*application_doesnotexist_BINARY \\},.*") ""))
-             #t))
-         (add-after 'disable-dns-tests 'build-and-install-html-doc
+               (("^AC_INIT.*" anchor)
+                (string-append anchor "AC_CONFIG_AUX_DIR([build-aux])\n")))))
+         (add-before 'build 'build-and-install-html-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((html (string-append (assoc-ref outputs "doc")
                                         "/share/doc/libmemcached/html/")))
@@ -609,9 +550,8 @@ applications.")
                ;; Cleanup useless files.
                (for-each delete-file-recursively
                          (map (lambda (x) (string-append html x))
-                              '("_sources" ".doctrees" ".buildinfo"))))
-             #t)))))
-    (home-page "https://libmemcached.org/")
+                              '("_sources" ".doctrees" ".buildinfo")))))))))
+    (home-page "https://libmemcached.org/libMemcached.html")
     (synopsis "C++ library for memcached")
     (description "libMemcached is a library to use memcached in C/C++
 applications.  It comes with a complete reference guide and documentation of
@@ -661,143 +601,6 @@ replacement for the code@{python-memcached} library.")
 (define-public python2-pylibmc
   (package-with-python2 python-pylibmc))
 
-;; This is the last version of mongodb before they switched to the Server Side
-;; Public License (SSPL), which is not a FOSS license.  As such, this package
-;; cannot be updated.
-(define-public mongodb
-  (package
-    (name "mongodb")
-    (version "3.4.24")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/mongodb/mongo/archive/r"
-                                  version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32 "0y1669sqj8wyf0y0njhxs4qhn1qzjhrs2h2qllya5samxrlrjhkg"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  (for-each (lambda (dir)
-                              (delete-file-recursively
-                                (string-append "src/third_party/" dir)))
-                            '("pcre-8.42" "scons-2.5.0" "snappy-1.1.3"
-                              "valgrind-3.11.0" "wiredtiger"
-                              "yaml-cpp-0.6.2" "zlib-1.2.11"))
-                  #t))))
-    (build-system scons-build-system)
-    (inputs
-     `(("openssl" ,openssl-1.0)
-       ("pcre" ,pcre)
-        ,@(match (%current-system)
-            ((or "x86_64-linux" "aarch64-linux" "mips64el-linux")
-             `(("wiredtiger" ,wiredtiger)))
-            (_ `()))
-       ("yaml-cpp" ,yaml-cpp)
-       ("zlib" ,zlib)
-       ("snappy" ,snappy)))
-    (native-inputs
-     `(("valgrind" ,valgrind)
-       ("perl" ,perl)
-       ("python" ,python-2)
-       ("python2-pymongo" ,python2-pymongo)
-       ("python2-pyyaml" ,python2-pyyaml)
-       ("tzdata" ,tzdata-for-tests)))
-    (arguments
-     `(#:scons ,scons-python2
-       #:phases
-       (let ((common-options
-              `(;; "--use-system-tcmalloc" TODO: Missing gperftools
-                "--use-system-pcre"
-                ;; wiredtiger is 64-bit only
-                ,,(if (any (cute string-prefix? <> (or (%current-target-system)
-                                                       (%current-system)))
-                           '("i686-linux" "armhf-linux"))
-                    ``"--wiredtiger=off"
-                    ``"--use-system-wiredtiger")
-                ;; TODO
-                ;; build/opt/mongo/db/fts/unicode/string.o failed: Error 1
-                ;; --use-system-boost
-                "--use-system-snappy"
-                "--use-system-zlib"
-                "--use-system-valgrind"
-                ;; "--use-system-stemmer" TODO: Missing relevant package
-                "--use-system-yaml"
-                "--disable-warnings-as-errors"
-                ,(format #f "--jobs=~a" (parallel-job-count))
-                "--ssl")))
-         (modify-phases %standard-phases
-           (add-after 'unpack 'patch
-             (lambda _
-               ;; Remove use of GNU extensions in parse_number_test.cpp, to
-               ;; allow compiling with GCC 7 or later
-               ;; https://jira.mongodb.org/browse/SERVER-28063
-               (substitute* "src/mongo/base/parse_number_test.cpp"
-                 (("0xabcab\\.defdefP-10")
-                  "687.16784283419838"))
-               #t))
-           (add-after 'unpack 'scons-propagate-environment
-             (lambda _
-               ;; Modify the SConstruct file to arrange for
-               ;; environment variables to be propagated.
-               (substitute* "SConstruct"
-                 (("^env = Environment\\(")
-                  "env = Environment(ENV=os.environ, "))
-               #t))
-           (add-after 'unpack 'create-version-file
-             (lambda _
-               (call-with-output-file "version.json"
-                 (lambda (port)
-                   (display ,(simple-format #f "{
-    \"version\": \"~A\"
-}" version) port)))
-               #t))
-           (replace 'build
-             (lambda _
-               (apply invoke `("scons"
-                               ,@common-options
-                               "mongod" "mongo" "mongos"))))
-           (replace 'check
-             (lambda* (#:key tests? inputs #:allow-other-keys)
-               (setenv "TZDIR"
-                       (string-append (assoc-ref inputs "tzdata")
-                                      "/share/zoneinfo"))
-               (when tests?
-                 ;; Note that with the tests, especially the unittests, the
-                 ;; build can take up to ~45GB of space, as many tests are
-                 ;; individual executable files, with some being hundreds of
-                 ;; megabytes in size.
-                 (apply invoke `("scons" ,@common-options "dbtest" "unittests"))
-                 (substitute* "build/unittests.txt"
-                   ;; TODO: Don't run the async_stream_test, as it hangs
-                   (("^build\\/opt\\/mongo\\/executor\\/async\\_stream\\_test\n$")
-                    "")
-                   ;; TODO: This test fails
-                   ;; Expected 0UL != disks.size() (0 != 0) @src/mongo/util/procparser_test.cpp:476
-                   (("^build\\/opt\\/mongo\\/util\\/procparser\\_test\n$")
-                    ""))
-                 (invoke "python" "buildscripts/resmoke.py"
-                         "--suites=dbtest,unittests"
-                         (format #f  "--jobs=~a" (parallel-job-count))))
-               #t))
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
-                 (install-file "mongod" bin)
-                 (install-file "mongos" bin)
-                 (install-file "mongo" bin))
-               #t))))))
-    (home-page "https://www.mongodb.org/")
-    (synopsis "High performance and high availability document database")
-    (description
-     "Mongo is a high-performance, high availability, schema-free
-document-oriented database.  A key goal of MongoDB is to bridge the gap
-between key/value stores (which are fast and highly scalable) and traditional
-RDBMS systems (which are deep in functionality).")
-    (license (list license:agpl3
-                   ;; Some parts are licensed under the Apache License
-                   license:asl2.0))))
-
 (define-public mycli
   (package
     (name "mycli")
@@ -932,6 +735,7 @@ Language.")
                             (append (find-files "extra/wolfssl")
                                     (find-files "zlib")))
                   #t))))
+    (replacement mariadb/fixed)
     (build-system cmake-build-system)
     (outputs '("out" "lib" "dev"))
     (arguments
@@ -1167,6 +971,13 @@ Language.")
 as a drop-in replacement of MySQL.")
     (license license:gpl2)))
 
+(define mariadb/fixed
+  (package
+    (inherit mariadb)
+    (source (origin
+              (inherit (package-source mariadb))
+              (patches (search-patches "mariadb-CVE-2021-27928.patch"))))))
+
 (define-public mariadb-connector-c
   (package
     (name "mariadb-connector-c")
@@ -1192,6 +1003,31 @@ as a drop-in replacement of MySQL.")
 developed in C/C++ to MariaDB and MySQL databases.")
     (license license:lgpl2.1+)))
 
+(define-public galera
+  (package
+    (name "galera")
+    (version "26.4.7")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (commit "bac8171266cb982fe013ce496d78085438c6f23e")
+                    (url "https://github.com/codership/galera")
+                    (recursive? #t)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32 "0h7s670pcasq8wzprhyxqfca2cghi62b8xz2kikb2a86wd453qil"))))
+    (build-system cmake-build-system)
+    (inputs
+     `(("check" ,check)
+       ("boost" ,boost)
+       ("openssl" ,openssl)))
+    (home-page "https://github.com/codership/galera/")
+    (synopsis "Extension to the MariaDB database server")
+    (description
+     "Galera is a wsrep-provider that is used with MariaDB for load-balancing
+and high-availability (HA).")
+    (license license:gpl2)))                  ;'COPYING' says "version 2" only
+
 ;; Don't forget to update the other postgresql packages when upgrading this one.
 (define-public postgresql-13
   (package
@@ -2237,6 +2073,35 @@ Driver.")
    ;; COPYING contains copy of lgpl2.1 - but copyright notices just say "LGPL"
    (home-page "http://www.unixodbc.org")))
 
+(define-public nanodbc
+  (package
+    (name "nanodbc")
+    (version "2.13.0")
+    (source (origin
+              (method git-fetch)
+              (uri
+               (git-reference
+                (url "https://github.com/nanodbc/nanodbc")
+                (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1q80p7yv9mcl4hyvnvcjdr70y8nc940ypf368lp97vpqn5yckkgm"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       ;; The tests require ODBC backends to be installed.
+       (list "-DNANODBC_DISABLE_TESTS=ON")
+       #:tests? #false))
+    (inputs
+     `(("unixodbc" ,unixodbc)))
+    (home-page "https://nanodbc.io/")
+    (synopsis "C++ wrapper for the native C ODBC API")
+    (description "The goal for nanodbc is to make developers happy by providing
+a simpler and less verbose API for working with ODBC.  Common tasks should be
+easy, requiring concise and simple code.")
+    (license license:expat)))
+
 (define-public unqlite
   (package
     (name "unqlite")
@@ -2659,7 +2524,10 @@ can autogenerate peewee models using @code{pwiz}, a model generator.")
                     (lambda _
                       (substitute* "setup.py"
                         (("pypika>=0\\.44\\.0,<0\\.45\\.0") "pypika")
-                        (("aiosqlite>=0.16.0,<0.17.0") "aiosqlite"))
+                        (("aiosqlite>=0.16.0,<0.17.0") "aiosqlite")
+                        (("pytz>=2020\\.4,<2021\\.0") "pytz")
+                        ;; Not required, since ciso8601 is used.
+                        (("'iso8601>=0\\.1\\.13,<0\\.2\\.0',") ""))
                       #t)))))
     (native-inputs
      `(("python-asynctest" ,python-asynctest)
@@ -2668,6 +2536,7 @@ can autogenerate peewee models using @code{pwiz}, a model generator.")
      `(("python-aiosqlite" ,python-aiosqlite)
        ("python-pypika" ,python-pypika)
        ("python-ciso8601" ,python-ciso8601)
+       ("python-pytz" ,python-pytz)
        ("python-typing-extensions"
         ,python-typing-extensions)))
     (home-page
@@ -3551,9 +3420,6 @@ processing them in the background with workers.  It is backed by Redis and it
 is designed to have a low barrier to entry.")
     (license license:bsd-2)))
 
-(define-public python2-rq
-  (package-with-python2 python-rq))
-
 (define-public python-rq-scheduler
   (package
     (name "python-rq-scheduler")
@@ -3686,121 +3552,6 @@ transforms idiomatic python function calls to well-formed SQL queries.")
 the SQL language using a syntax that reflects the resulting query.")
     (license license:asl2.0)))
 
-(define-public mongo-tools
-  (package
-    (name "mongo-tools")
-    (version "3.4.0")
-    (source
-     (origin (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/mongodb/mongo-tools")
-                   (commit (string-append "r" version))))
-             (file-name (git-file-name name version))
-             (sha256
-              (base32
-               "1bcsz5cvj39a7nsxsfqmz9igrw33j6yli9kffigqyscs52amw7x1"))))
-    (build-system go-build-system)
-    (arguments
-     `(#:import-path "github.com/mongodb/mongo-tools"
-       #:modules ((srfi srfi-1)
-                  (guix build go-build-system)
-                  (guix build utils))
-       #:install-source? #f
-       #:phases
-       (let ((all-tools
-              '("bsondump" "mongodump" "mongoexport" "mongofiles"
-                "mongoimport" "mongooplog" "mongorestore"
-                "mongostat" "mongotop")))
-         (modify-phases %standard-phases
-           (add-after 'unpack 'delete-bundled-source-code
-             (lambda _
-               (delete-file-recursively
-                "src/github.com/mongodb/mongo-tools/vendor")
-               #t))
-           (add-after 'delete-bundled-source-code 'patch-source
-             (lambda _
-               ;; Remove a redundant argument that causes compilation to fail.
-               (substitute*
-                   "src/github.com/mongodb/mongo-tools/mongorestore/filepath.go"
-                 (("skipping restore of system.profile collection\", db)")
-                  "skipping restore of system.profile collection\")"))
-               #t))
-           (replace 'build
-             (lambda _
-               (for-each (lambda (tool)
-                           (let ((command
-                                  `("go" "build"
-                                    ;; This is where the tests expect to find the
-                                    ;; executables
-                                    "-o" ,(string-append
-                                           "src/github.com/mongodb/mongo-tools/bin/"
-                                           tool)
-                                    "-v"
-                                    "-tags=\"ssl sasl\""
-                                    "-ldflags"
-                                    "-extldflags=-Wl,-z,now,-z,relro"
-                                    ,(string-append
-                                      "src/github.com/mongodb/mongo-tools/"
-                                      tool "/main/" tool ".go"))))
-                             (simple-format #t "build: running ~A\n"
-                                            (string-join command))
-                             (apply invoke command)))
-                         all-tools)
-               #t))
-           (replace 'check
-             (lambda _
-               (with-directory-excursion "src"
-                 (for-each (lambda (tool)
-                             (invoke
-                              "go" "test" "-v"
-                              (string-append "github.com/mongodb/mongo-tools/"
-                                             tool)))
-                           all-tools))
-               #t))
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (for-each (lambda (tool)
-                           (install-file
-                            (string-append "src/github.com/mongodb/mongo-tools/bin/"
-                                           tool)
-                            (string-append (assoc-ref outputs "out")
-                                           "/bin")))
-                         all-tools)
-               #t))))))
-    (native-inputs
-     `(("go-github.com-howeyc-gopass" ,go-github.com-howeyc-gopass)
-       ("go-github.com-jessevdk-go-flags" ,go-github.com-jessevdk-go-flags)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-gopkg.in-mgo.v2" ,go-gopkg.in-mgo.v2)
-       ("go-gopkg.in-tomb.v2" ,go-gopkg.in-tomb.v2)
-       ("go-github.com-nsf-termbox-go" ,go-github.com-nsf-termbox-go)
-       ("go-github.com-smartystreets-goconvey" ,go-github.com-smartystreets-goconvey)))
-    (home-page "https://github.com/mongodb/mongo-tools")
-    (synopsis "Various tools for interacting with MongoDB and BSON")
-    (description
-     "This package includes a collection of tools related to MongoDB.
-@table @code
-@item bsondump
-Display BSON files in a human-readable format
-@item mongoimport
-Convert data from JSON, TSV or CSV and insert them into a collection
-@item mongoexport
-Write an existing collection to CSV or JSON format
-@item mongodump/mongorestore
-Dump MongoDB backups to disk in the BSON format
-@item mongorestore
-Read MongoDB backups in the BSON format, and restore them to a live database
-@item mongostat
-Monitor live MongoDB servers, replica sets, or sharded clusters
-@item mongofiles
-Read, write, delete, or update files in GridFS
-@item mongooplog
-Replay oplog entries between MongoDB servers
-@item mongotop
-Monitor read/write activity on a mongo server
-@end table")
-    (license license:asl2.0)))
-
 ;; There are many wrappers for this in other languages. When touching, please
 ;; be sure to ensure all dependencies continue to build.
 (define-public apache-arrow
@@ -4090,7 +3841,8 @@ The drivers officially supported by @code{libdbi} are:
                (base32
                 "14x2gjblkgpflv75wl144cyjp1sis5rbxnr9r2gj3yw16v2av0bp"))))
     (build-system cmake-build-system)
-    (inputs
+    (propagated-inputs
+     ;; Headers of soci has include-references to headers of these inputs.
      `(("firebird" ,firebird)
        ("postgresql" ,postgresql)
        ("sqlite" ,sqlite)
@@ -4113,14 +3865,14 @@ PostreSQL, SQLite, ODBC and MySQL.")
 (define-public freetds
   (package
     (name "freetds")
-    (version "1.2.18")
+    (version "1.2.20")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.freetds.org/files/stable/"
                            "freetds-" version ".tar.gz"))
        (sha256
-        (base32 "1hspvwxwdd1apadsy2b40dpjik8kfwcvdamvhpg3lnm15n02fb50"))))
+        (base32 "11fzwcahc1bc8npxbif0448v9cwyf7k04167i7fcspmfw7a0hj0d"))))
     (build-system gnu-build-system)
     (arguments
      ;; NOTE: (Sharlatan-20210110213908+0000) some tests require DB connection,