C++ Web Framework  3.0
sqldatabasestorage.h
1 /*
2  Copyright 2017 Herik Lima de Castro and Marcelo Medeiros Eler
3  Distributed under MIT license, or public domain if desired and
4  recognized in your jurisdiction.
5  See file LICENSE for detail.
6 */
7 
8 #ifndef SQLDATABASESTORAGE_H
9 #define SQLDATABASESTORAGE_H
10 
11 #include <QUuid>
12 #include <QDebug>
13 #include <QSqlError>
14 #include <QSqlDatabase>
15 #include <QThreadStorage>
16 #include "cppwebframework_global.h"
17 
18 CWF_BEGIN_NAMESPACE
22 class CPPWEBFRAMEWORKSHARED_EXPORT SqlDatabaseStorage
23 {
24  class Database
25  {
26  friend class SqlDatabaseStorage;
27  QSqlDatabase *db = nullptr;
28  public:
29  Database() = default;
30  Database(Database &other)
31  {
32  db = other.db;
33  other.db = nullptr;
34  }
35  ~Database()
36  {
37  if(db)
38  {
39  const QString conName(db->connectionName());
40  db->close();
41  delete db;
42  QSqlDatabase::removeDatabase(conName);
43  }
44  }
45  };
46  QString type;
47  QString hostName;
48  QString databaseName;
49  QString userName;
50  QString password;
51  int port;
52  QThreadStorage<Database> pool;
53 public:
63  SqlDatabaseStorage(const QString &type = "", const QString &hostName = "",
64  const QString &databaseName = "", const QString &userName = "",
65  const QString &password = "", int port = 0) : type(type), hostName(hostName),
66  databaseName(databaseName), userName(userName),
67  password(password), port(port)
68  {
69  }
70 
74  inline QString getType() const { return type; }
75 
79  inline QString getPassword() const { return password; }
80 
84  inline QString getHostName() const { return hostName; }
85 
89  inline QString getDatabaseName() const { return databaseName; }
90 
94  inline QString getUserName() const { return userName; }
95 
99  inline int getPort() const { return port; }
100 
104  QSqlDatabase &getDatabase()
105  {
106  if(!pool.hasLocalData())
107  {
108  Database database;
109  database.db = new QSqlDatabase(QSqlDatabase::addDatabase(type, QUuid::createUuid().toString()));
110  database.db->setHostName(hostName);
111  database.db->setDatabaseName(databaseName);
112  database.db->setPort(port);
113  database.db->setUserName(userName);
114  database.db->setPassword(password);
115  if(!database.db->open())
116  qDebug() << database.db->lastError().text();
117  pool.setLocalData(database);
118  }
119  return *pool.localData().db;
120  }
121 };
122 
123 CWF_END_NAMESPACE
124 
125 #endif // SQLDATABASESTORAGE_H
QString getHostName() const
Returns the host name.
Definition: sqldatabasestorage.h:84
QSqlDatabase & getDatabase()
Returns the existing connection to the current thread&#39;s database. If there is no open connection to t...
Definition: sqldatabasestorage.h:104
QString getDatabaseName() const
Returns the database&#39;s name.
Definition: sqldatabasestorage.h:89
QString getUserName() const
Returns the user&#39;s name.
Definition: sqldatabasestorage.h:94
int getPort() const
Returns the port.
Definition: sqldatabasestorage.h:99
The SqlDatabaseStorage class allows you to reuse connections made to the database through the QSqlDat...
Definition: sqldatabasestorage.h:22
SqlDatabaseStorage(const QString &type="", const QString &hostName="", const QString &databaseName="", const QString &userName="", const QString &password="", int port=0)
This constructor receives informations to create a connection to the database.
Definition: sqldatabasestorage.h:63
QString getType() const
Returns the type.
Definition: sqldatabasestorage.h:74
QString getPassword() const
Returns the password.
Definition: sqldatabasestorage.h:79