1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
////////////////////////////////////////////////////////////////////////////////
/*! @file Database.cpp Class sDatabase.
- Part of RANet - Research Assistant Net Library.
- Uses Qt v.5 - http://qt.io/
- Copyright(C) 2013-2018, Viktor E. Bursian, St.Petersburg, Russia.
VBursian AT gmail DOT com
*///////////////////////////////////////////////////////////////////////////////
#include "Database.h"
#include "StringsAndQStrings.h"
#include <QCoreApplication>
#include <QThread>
#include "Log.h"
namespace RA {
//------------------------------------------------------------------------------
//---------------------------------------------------------------- sDatabase ---
sDatabase::~sDatabase ()
{
DEBUG_LOG(Quitting,"sDatabase::~sDatabase");
QString ConnectionName;
if( BackgroundConnection ){
RANet::Log.Put(sLog::Critical,"Quitting","sDatabase::~sDatabase:"
"BackgroundConnection is not closed");
}
if( MainConnection ){
ConnectionName = MainConnection->connectionName();
DEBUG_LOG(NetOpen,FromQString(ConnectionName)+" -- closing");
MainConnection->close();
delete MainConnection; MainConnection=NULL;
QSqlDatabase::removeDatabase(ConnectionName);
}
}
sDatabase::sDatabase (rcsDB_Link link)
:sDB_Link(link)
,MainConnection(NULL)
,BackgroundConnection(NULL)
{
}
sDatabase::sDatabase (rcsDatabase other)
:sDB_Link(other)
,MainConnection(NULL)
,BackgroundConnection(NULL)
{
}
sDBConnection sDatabase::Connection (const QString & name_suffix)
{
psDBConnection C;
QString ConnectionName;
if( QThread::currentThread() == QCoreApplication::instance()->thread() ){
C = MainConnection;
ConnectionName = Id.ToString() + URL() + "_" + name_suffix + "_main";
}else{
C = BackgroundConnection;
ConnectionName = Id.ToString() + URL() + "_" + name_suffix + "_background";
}
if( ! C ){
C = new sDBConnection();
if( QThread::currentThread() == QCoreApplication::instance()->thread() ){
MainConnection = C;
}else{
BackgroundConnection = C;
}
(*C) = QSqlDatabase::addDatabase(QtDriverName[Type],ConnectionName);
C->setHostName(ToQString(Host));
C->setPort(Port);
C->setDatabaseName(ToQString(DBName));
C->setUserName(ToQString(Login));
//!@todo{SQL} if Password=="___" запросить и здесь поправить.
C->setPassword(ToQString(Password));
C->setConnectOptions(ToQString(ConnectOptions));
DEBUG_LOG(NetOpen,FromQString(ConnectionName)+" -- opening...");
C->open();
IF_DEBUG(
if( C->isOpen() )
DEBUG_LOG(NetOpen,FromQString(ConnectionName)+" -- is open");
)
}
return *C;
}
void sDatabase::CloseBackgroundConnection ()
{
QString ConnectionName;
if( BackgroundConnection ){
ConnectionName = BackgroundConnection->connectionName();
DEBUG_LOG(NetOpen,FromQString(ConnectionName)+" -- closing");
BackgroundConnection->close();
delete BackgroundConnection; BackgroundConnection=NULL;
QSqlDatabase::removeDatabase(ConnectionName);
}
}
//------------------------------------------------------------------------------
} //namespace RA
|