0
0
mirror of https://github.com/fralx/LimeReport.git synced 2025-10-09 05:57:14 +03:00

Database connections have been refactored

keepDbCredentials property has been added to Connection
setPassPharse(QString& passPharse) method has been added to ReportEngine
IDbCredentialsProvider interface has been added
registerDbCredentialsProvider(IDbCredentialsProvider *provider) has been
added to IDataSourceManager
This commit is contained in:
Arin Alexander
2017-02-16 04:11:39 +03:00
parent fa985d7fb7
commit ce3a905c55
22 changed files with 257 additions and 64 deletions

View File

@@ -217,7 +217,7 @@ void DataSourceModel::updateModel()
}
DataSourceManager::DataSourceManager(QObject *parent) :
QObject(parent), m_lastError(""), m_designTime(true), m_needUpdate(false)
QObject(parent), m_lastError(""), m_designTime(true), m_needUpdate(false), m_dbCredentialsProvider(0)
{
m_groupFunctionFactory.registerFunctionCreator(QLatin1String("COUNT"),new ConstructorGroupFunctionCreator<CountGroupFunction>);
m_groupFunctionFactory.registerFunctionCreator(QLatin1String("SUM"),new ConstructorGroupFunctionCreator<SumGroupFunction>);
@@ -324,6 +324,11 @@ ICallbackDatasource *DataSourceManager::createCallbackDatasouce(const QString& n
return ds;
}
void DataSourceManager::registerDbCredentialsProvider(IDbCredentialsProvider *provider)
{
m_dbCredentialsProvider = provider;
}
void DataSourceManager::addCallbackDatasource(ICallbackDatasource *datasource, const QString& name)
{
IDataSource* datasourceIntf = dynamic_cast<IDataSource*>(datasource);
@@ -567,6 +572,11 @@ int DataSourceManager::connectionIndexByName(const QString &connectionName)
return -1;
}
QList<ConnectionDesc *>& DataSourceManager::conections()
{
return m_connections;
}
bool DataSourceManager::dataSourceIsValid(const QString &name)
{
if (m_datasources.value(name.toLower())) return !m_datasources.value(name.toLower())->isInvalid();
@@ -704,10 +714,19 @@ void DataSourceManager::putProxyDesc(ProxyDesc *proxyDesc)
bool DataSourceManager::initAndOpenDB(QSqlDatabase& db, ConnectionDesc& connectionDesc){
bool connected = false;
db.setHostName(replaceVariables(connectionDesc.host()));
db.setUserName(replaceVariables(connectionDesc.userName()));
db.setPassword(replaceVariables(connectionDesc.password()));
if (!connectionDesc.keepDBCredentials() && m_dbCredentialsProvider){
if (!m_dbCredentialsProvider->getUserName(connectionDesc.name()).isEmpty())
db.setUserName(m_dbCredentialsProvider->getUserName(connectionDesc.name()));
if (!m_dbCredentialsProvider->getPassword(connectionDesc.name()).isEmpty())
db.setPassword(m_dbCredentialsProvider->getPassword(connectionDesc.name()));
}
QString dbName = replaceVariables(connectionDesc.databaseName());
if (connectionDesc.driver().compare("QSQLITE")==0){
if (!defaultDatabasePath().isEmpty()){
@@ -726,7 +745,6 @@ bool DataSourceManager::initAndOpenDB(QSqlDatabase& db, ConnectionDesc& connecti
}
connected=db.open();
connectionDesc.setInternal(true);
if (!connected) setLastError(db.lastError().text());
return connected;
}
@@ -758,10 +776,17 @@ bool DataSourceManager::connectConnection(ConnectionDesc *connectionDesc)
}
if (!QSqlDatabase::contains(connectionDesc->name())){
QSqlDatabase db = QSqlDatabase::addDatabase(connectionDesc->driver(),connectionDesc->name());
connected=initAndOpenDB(db, *connectionDesc);
QString dbError;
{
QSqlDatabase db = QSqlDatabase::addDatabase(connectionDesc->driver(),connectionDesc->name());
connectionDesc->setInternal(true);
connected=initAndOpenDB(db, *connectionDesc);
dbError = db.lastError().text();
}
if (!connected){
setLastError(db.lastError().text());
if (!dbError.trimmed().isEmpty())
setLastError(dbError);
QSqlDatabase::removeDatabase(connectionDesc->name());
return false;
}
} else {
@@ -868,8 +893,9 @@ bool DataSourceManager::isConnection(const QString &connectionName)
bool DataSourceManager::isConnectionConnected(const QString &connectionName)
{
if (isConnection(connectionName)){
return QSqlDatabase::database(connectionName).isOpen();
if (isConnection(connectionName) && QSqlDatabase::contains(connectionName)){
QSqlDatabase db = QSqlDatabase::database(connectionName);
return db.isValid() && QSqlDatabase::database(connectionName).isOpen();
}
return false;
}
@@ -893,8 +919,10 @@ void DataSourceManager::disconnectConnection(const QString& connectionName)
ConnectionDesc* connectionDesc = connectionByName(connectionName);
if (connectionDesc->isInternal()){
QSqlDatabase db = QSqlDatabase::database(connectionName);
if (db.isOpen()) db.close();
{
QSqlDatabase db = QSqlDatabase::database(connectionName);
if (db.isOpen()) db.close();
}
if (QSqlDatabase::contains(connectionName)) QSqlDatabase::removeDatabase(connectionName);
}