1 #pragma once
2 
3 #include <QSqlDatabase>
4 #include <QtDebug>
5 
6 #include "util/string.h"
7 
8 namespace mixxx {
9 
10 class DbConnection final {
11   public:
12     // Order string fields lexicographically with a
13     // custom collation function if available (SQLite3).
14     // Otherwise the query is returned unmodified.
15     static QString collateLexicographically(
16             const QString& orderByQuery);
17 
18     static int likeCompareLatinLow(
19         QString* pattern,
20         QString* string,
21         QChar esc);
22 
23     static void makeStringLatinLow(QString* string);
24 
25     struct Params {
26         QString type;
27         QString connectOptions;
28         QString hostName;
29         QString filePath;
30         QString userName;
31         QString password;
32     };
33 
34     // All constructors are reserved for DbConnectionPool!!
35     DbConnection(
36             const Params& params,
37             const QString& connectionName);
38     DbConnection(
39             const DbConnection& prototype,
40             const QString& connectionName);
41     ~DbConnection();
42 
name()43     QString name() const {
44         return m_sqlDatabase.connectionName();
45     }
46 
47     bool open();
48     void close();
49 
isOpen()50     bool isOpen() const {
51         return m_sqlDatabase.isOpen();
52     }
53 
QSqlDatabase()54     operator QSqlDatabase() const {
55         return m_sqlDatabase;
56     }
57 
58     friend QDebug operator<<(QDebug debug, const DbConnection& connection);
59 
60   private:
61     DbConnection(const DbConnection&) = delete;
62     DbConnection(const DbConnection&&) = delete;
63 
64     QSqlDatabase m_sqlDatabase;
65     StringCollator m_collator;
66 };
67 
68 } // namespace mixxx
69