0
0
mirror of https://github.com/fralx/LimeReport.git synced 2024-12-25 00:54:39 +03:00

QueryHolder fixed

This commit is contained in:
Arin Alexander 2017-10-27 22:58:08 +03:00
commit d47b84235e
4 changed files with 13 additions and 22 deletions

View File

@ -62,7 +62,7 @@ RCC_DIR = $${ARCH_DIR}/$${BUILD_TYPE}/rcc
LIMEREPORT_VERSION_MAJOR = 1 LIMEREPORT_VERSION_MAJOR = 1
LIMEREPORT_VERSION_MINOR = 4 LIMEREPORT_VERSION_MINOR = 4
LIMEREPORT_VERSION_RELEASE = 49 LIMEREPORT_VERSION_RELEASE = 51
LIMEREPORT_VERSION = '\\"$${LIMEREPORT_VERSION_MAJOR}.$${LIMEREPORT_VERSION_MINOR}.$${LIMEREPORT_VERSION_RELEASE}\\"' LIMEREPORT_VERSION = '\\"$${LIMEREPORT_VERSION_MAJOR}.$${LIMEREPORT_VERSION_MINOR}.$${LIMEREPORT_VERSION_RELEASE}\\"'
DEFINES += LIMEREPORT_VERSION_STR=\"$${LIMEREPORT_VERSION}\" DEFINES += LIMEREPORT_VERSION_STR=\"$${LIMEREPORT_VERSION}\"

View File

@ -57,21 +57,21 @@ IDataSource * ModelHolder::dataSource(IDataSource::DatasourceMode mode)
} }
QueryHolder::QueryHolder(QString queryText, QString connectionName, DataSourceManager *dataManager) QueryHolder::QueryHolder(QString queryText, QString connectionName, DataSourceManager *dataManager)
: m_query(0), m_queryText(queryText), m_connectionName(connectionName), : m_queryText(queryText), m_connectionName(connectionName),
m_mode(IDataSource::RENDER_MODE), m_dataManager(dataManager), m_prepared(true) m_mode(IDataSource::RENDER_MODE), m_dataManager(dataManager), m_prepared(true)
{ {
extractParams(); extractParams();
} }
QueryHolder::~QueryHolder() QueryHolder::~QueryHolder(){}
{
if (m_query) delete m_query;
}
bool QueryHolder::runQuery(IDataSource::DatasourceMode mode) bool QueryHolder::runQuery(IDataSource::DatasourceMode mode)
{ {
m_mode = mode; m_mode = mode;
QSqlDatabase db = QSqlDatabase::database(m_connectionName); QSqlDatabase db = QSqlDatabase::database(m_connectionName);
QSqlQuery* query = new QSqlQuery(db);
if (!db.isValid()) { if (!db.isValid()) {
setLastError(QObject::tr("Invalid connection! %1").arg(m_connectionName)); setLastError(QObject::tr("Invalid connection! %1").arg(m_connectionName));
return false; return false;
@ -82,16 +82,13 @@ bool QueryHolder::runQuery(IDataSource::DatasourceMode mode)
if (!m_prepared) return false; if (!m_prepared) return false;
} }
if (!m_query){ query->prepare(m_preparedSQL);
m_query = new QSqlQuery(db);
m_query->prepare(m_preparedSQL);
}
fillParams(m_query); fillParams(query);
m_query->exec(); query->exec();
QSqlQueryModel *model = new QSqlQueryModel; QSqlQueryModel *model = new QSqlQueryModel;
model->setQuery(*m_query); model->setQuery(*query);
while (model->canFetchMore()) while (model->canFetchMore())
model->fetchMore(); model->fetchMore();
@ -102,7 +99,7 @@ bool QueryHolder::runQuery(IDataSource::DatasourceMode mode)
setLastError(model->lastError().text()); setLastError(model->lastError().text());
delete model; delete model;
return false; return false;
} else setLastError(""); } else { setLastError("");}
setDatasource(IDataSource::Ptr(new ModelToDataSource(model,true))); setDatasource(IDataSource::Ptr(new ModelToDataSource(model,true)));
return true; return true;
@ -122,7 +119,6 @@ void QueryHolder::invalidate(IDataSource::DatasourceMode mode, bool dbWillBeClos
QSqlDatabase db = QSqlDatabase::database(m_connectionName); QSqlDatabase db = QSqlDatabase::database(m_connectionName);
if (!db.isValid() || dbWillBeClosed){ if (!db.isValid() || dbWillBeClosed){
setLastError(QObject::tr("Invalid connection! %1").arg(m_connectionName)); setLastError(QObject::tr("Invalid connection! %1").arg(m_connectionName));
delete m_query;
m_dataSource.clear(); m_dataSource.clear();
} else { } else {
runQuery(mode); runQuery(mode);
@ -197,10 +193,6 @@ void QueryHolder::setQueryText(QString queryText)
{ {
m_queryText=queryText; m_queryText=queryText;
m_prepared = false; m_prepared = false;
if (m_query) {
delete m_query;
m_query = 0;
}
} }
IDataSource* QueryHolder::dataSource(IDataSource::DatasourceMode mode) IDataSource* QueryHolder::dataSource(IDataSource::DatasourceMode mode)

View File

@ -199,7 +199,7 @@ public:
bool isRemovable() const { return true; } bool isRemovable() const { return true; }
bool isPrepared() const {return m_prepared;} bool isPrepared() const {return m_prepared;}
QString lastError() const { return m_lastError; } QString lastError() const { return m_lastError; }
void setLastError(QString value){m_lastError=value; if (m_query) {delete m_query; m_query=0;}} void setLastError(QString value){m_lastError=value;}
void invalidate(IDataSource::DatasourceMode mode, bool dbWillBeClosed = false); void invalidate(IDataSource::DatasourceMode mode, bool dbWillBeClosed = false);
void update(); void update();
void clearErrors(){setLastError("");} void clearErrors(){setLastError("");}
@ -211,7 +211,6 @@ protected:
virtual void extractParams(); virtual void extractParams();
QString replaceVariables(QString query); QString replaceVariables(QString query);
QMap<QString,QString> m_aliasesToParam; QMap<QString,QString> m_aliasesToParam;
QSqlQuery* m_query;
QString m_preparedSQL; QString m_preparedSQL;
private: private:
QString m_queryText; QString m_queryText;

View File

@ -933,7 +933,7 @@ void DataSourceManager::disconnectConnection(const QString& connectionName)
if (isQuery(datasourceName) || isSubQuery(datasourceName)){ if (isQuery(datasourceName) || isSubQuery(datasourceName)){
QueryHolder* qh = dynamic_cast<QueryHolder*>(dataSourceHolder(datasourceName)); QueryHolder* qh = dynamic_cast<QueryHolder*>(dataSourceHolder(datasourceName));
if (qh && qh->connectionName().compare(connectionName,Qt::CaseInsensitive)==0){ if (qh && qh->connectionName().compare(connectionName,Qt::CaseInsensitive)==0){
qh->invalidate(designTime()?IDataSource::DESIGN_MODE:IDataSource::RENDER_MODE, true); qh->invalidate(designTime()?IDataSource::DESIGN_MODE:IDataSource::RENDER_MODE);
qh->setLastError(tr("invalid connection")); qh->setLastError(tr("invalid connection"));
} }
} }