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