Fixed QSqlDatabase warnings

This commit is contained in:
Patrick Linstruth 2018-10-08 22:03:56 -07:00
parent bec85018a3
commit 74739cad2e
6 changed files with 147 additions and 122 deletions

View File

@ -42,100 +42,96 @@ bool CreateDb::create(QWidget *parent,QString *err_str,RDConfig *rd_config)
//
// Open Database
//
if (!db.isOpen()){
db=QSqlDatabase::addDatabase(rd_config->mysqlDriver(),"createDb");
if(!db.isValid()) {
*err_str+= QString(QObject::tr("Couldn't initialize MySql driver!"));
return true;
}
db.setHostName(db_host);
db.setDatabaseName("mysql");
db.setUserName(db_user);
db.setPassword(db_pass);
if(!db.open()) {
*err_str+=QString(QObject::tr("Couldn't open MySQL connection on"))+
" \""+db_host+"\".";
db.removeDatabase(db.connectionName());
db.close();
return true;
}
QSqlDatabase db=QSqlDatabase::addDatabase(rd_config->mysqlDriver(),"createDb");
if(!db.isValid()) {
*err_str+= QString(QObject::tr("Couldn't initialize MySql driver!"));
return true;
}
QSqlQuery *q;
db.setHostName(db_host);
db.setDatabaseName("mysql");
db.setUserName(db_user);
db.setPassword(db_pass);
if(!db.open()) {
*err_str+=QString().sprintf("Couldn't open MySQL connection on %s",(const char *)db_host);
return true;
}
sql=QString().sprintf("drop database if exists `%s`",(const char *)db_name);
q=new QSqlQuery(sql,db);
if (!q->isActive()) {
*err_str+=QString(QObject::tr("Could not remove old database"));
return true;
}
delete q;
QSqlQuery *q;
sql=QString().sprintf("create database if not exists `%s`",(const char *)db_name);
q=new QSqlQuery(sql,db);
if (!q->isActive()) {
*err_str+=QString(QObject::tr("Could not create new database"));
return true;
}
delete q;
sql=QString().sprintf("drop database if exists `%s`",(const char *)db_name);
q=new QSqlQuery(sql,db);
if (!q->isActive()) {
*err_str+=QString(QObject::tr("Could not remove old database"));
return true;
}
delete q;
//
// Drop any existing 'rduser'@'%' and 'rduser'@'localhost' users
//
sql=QString().sprintf("drop user '%s'@'%%'",(const char *)rd_config->mysqlUsername());
q=new QSqlQuery(sql,db);
delete q;
sql=QString().sprintf("drop user '%s'@'localhost'",(const char *)rd_config->mysqlUsername());
q=new QSqlQuery(sql,db);
delete q;
sql=QString().sprintf("create database if not exists `%s`",(const char *)db_name);
q=new QSqlQuery(sql,db);
if (!q->isActive()) {
*err_str+=QString(QObject::tr("Could not create new database"));
return true;
}
delete q;
sql=QString("flush privileges");
q=new QSqlQuery(sql,db);
delete q;
//
// Drop any existing 'rduser'@'%' and 'rduser'@'localhost' users
//
sql=QString().sprintf("drop user '%s'@'%%'",(const char *)rd_config->mysqlUsername());
q=new QSqlQuery(sql,db);
delete q;
sql=QString().sprintf("drop user '%s'@'localhost'",(const char *)rd_config->mysqlUsername());
q=new QSqlQuery(sql,db);
delete q;
sql=QString().sprintf("create user '%s'@'%%' identified by \"%s\"",
(const char *)rd_config->mysqlUsername(),(const char *)rd_config->mysqlPassword());
q=new QSqlQuery(sql,db);
if (!q->isActive()) {
*err_str+=QString().sprintf("Could not create user: '%s'@'%%'",(const char *)sql);
return true;
}
delete q;
sql=QString("flush privileges");
q=new QSqlQuery(sql,db);
delete q;
sql=QString().sprintf("create user '%s'@'localhost' identified by \"%s\"",
(const char *)rd_config->mysqlUsername(),(const char *)rd_config->mysqlPassword());
q=new QSqlQuery(sql,db);
if (!q->isActive()) {
*err_str+=QString().sprintf("Could not create user: '%s'@'localhost'",(const char *)sql);
return true;
}
delete q;
sql=QString().sprintf("create user '%s'@'%%' identified by \"%s\"",
(const char *)rd_config->mysqlUsername(),(const char *)rd_config->mysqlPassword());
q=new QSqlQuery(sql,db);
if (!q->isActive()) {
*err_str+=QString().sprintf("Could not create user: '%s'@'%%'",(const char *)sql);
return true;
}
delete q;
sql=QString().sprintf("grant SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,\
INDEX, ALTER, LOCK TABLES on %s.* to %s",
(const char *)db_name, (const char *)rd_config->mysqlUsername());
q=new QSqlQuery(sql,db);
if (!q->isActive()) {
*err_str+=QString().sprintf("Could not set permissions: %s",(const char *)sql);
return true;
}
delete q;
sql=QString().sprintf("create user '%s'@'localhost' identified by \"%s\"",
(const char *)rd_config->mysqlUsername(),(const char *)rd_config->mysqlPassword());
q=new QSqlQuery(sql,db);
if (!q->isActive()) {
*err_str+=QString().sprintf("Could not create user: '%s'@'localhost'",(const char *)sql);
return true;
}
delete q;
sql=QString("flush privileges");
q=new QSqlQuery(sql,db);
delete q;
sql=QString().sprintf("grant SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,\
INDEX, ALTER, LOCK TABLES on %s.* to %s",
(const char *)db_name, (const char *)rd_config->mysqlUsername());
q=new QSqlQuery(sql,db);
if (!q->isActive()) {
*err_str+=QString().sprintf("Could not set permissions: %s",(const char *)sql);
return true;
}
delete q;
QProcess rddbmgrProcess(parent);
QStringList args;
args << QString("--create");
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
rddbmgrProcess.start(QString(RD_PREFIX)+"/sbin/rddbmgr",args);
rddbmgrProcess.waitForFinished();
QApplication::restoreOverrideCursor();
if (rddbmgrProcess.exitCode()) {
*err_str+=QString().sprintf("Failed to create %s database. Rddbmgr exit code=%d",
(const char *)db_name,rddbmgrProcess.exitCode());
return true;
}
sql=QString("flush privileges");
q=new QSqlQuery(sql,db);
delete q;
QProcess rddbmgrProcess(parent);
QStringList args;
args << QString("--create");
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
rddbmgrProcess.start(QString(RD_PREFIX)+"/sbin/rddbmgr",args);
rddbmgrProcess.waitForFinished();
QApplication::restoreOverrideCursor();
if (rddbmgrProcess.exitCode()) {
*err_str+=QString().sprintf("Failed to create %s database. Rddbmgr exit code=%d",
(const char *)db_name,rddbmgrProcess.exitCode());
return true;
}
return false;
@ -143,14 +139,16 @@ bool CreateDb::create(QWidget *parent,QString *err_str,RDConfig *rd_config)
CreateDb::~CreateDb()
{
if(db.isOpen()) {
db.removeDatabase(db_name);
{
QSqlDatabase db=QSqlDatabase::database("createDb");
db.close();
}
QSqlDatabase::removeDatabase("createDb");
}
bool CreateDb::isOpen()
{
QSqlDatabase db=QSqlDatabase::database("createDb");
return db.isOpen();
}

View File

@ -39,7 +39,6 @@ class CreateDb
QString db_name;
QString db_user;
QString db_pass;
QSqlDatabase db;
};
#endif // CREATEDB_H

View File

@ -31,43 +31,41 @@ Db::Db(QString *err_str,RDConfig *config)
//
// Open Database
//
if (!db.isOpen()){
db=QSqlDatabase::addDatabase(config->mysqlDriver());
if(!db.isValid()) {
*err_str+= QString(QObject::tr("Couldn't initialize MySql driver!"));
return;
}
db.setHostName(config->mysqlHostname());
db.setDatabaseName(config->mysqlDbname());
db.setUserName(config->mysqlUsername());
db.setPassword(config->mysqlPassword());
if(!db.open()) {
*err_str+=QString(QObject::tr("Couldn't open MySQL connection on"))+
" \""+config->mysqlHostname()+"\".";
db.removeDatabase(config->mysqlDbname());
db.close();
return;
}
q=new QSqlQuery("select DB from VERSION");
if(q->first()) {
db_schema=q->value(0).toUInt();
}
delete q;
QSqlDatabase db=QSqlDatabase::addDatabase(config->mysqlDriver(),"Rivendell");
if(!db.isValid()) {
*err_str+= QString(QObject::tr("Couldn't initialize MySql driver!"));
return;
}
db.setHostName(config->mysqlHostname());
db.setDatabaseName(config->mysqlDbname());
db.setUserName(config->mysqlUsername());
db.setPassword(config->mysqlPassword());
if(!db.open()) {
*err_str+=QString().sprintf("Couldn't open MySQL connection on %s",
(const char *)config->mysqlHostname());
return;
}
q=new QSqlQuery("select DB from VERSION",db);
if(q->first()) {
db_schema=q->value(0).toUInt();
}
delete q;
}
Db::~Db()
{
if(db.isOpen()) {
// db.removeDatabase(config->mysqlDbname());
{
QSqlDatabase db=QSqlDatabase::database("Rivendell");
db.close();
}
QSqlDatabase::removeDatabase("Rivendell");
}
bool Db::isOpen()
{
QSqlDatabase db=QSqlDatabase::database("Rivendell");
return db.isOpen();
}

View File

@ -34,7 +34,6 @@ class Db
unsigned schema();
private:
QSqlDatabase db;
unsigned db_schema;
};

View File

@ -176,13 +176,12 @@ void MainWidget::updateLabels()
db = new Db(&err_msg,rd_config);
if (!db->isOpen()) {
label_schema->setVisible(false);
label_schema->setText("DB Version: unknown");
db_backup_button->setEnabled(false);
db_restore_button->setEnabled(false);
}
else {
label_schema->setText(QString().sprintf("DB Version: %d",db->schema()));
label_schema->setVisible(true);
db_backup_button->setEnabled(true);
db_restore_button->setEnabled(true);
}
@ -211,7 +210,10 @@ void MainWidget::createData()
mysql_login=new MySqlLogin(msg,&hostname,&dbname,&admin_name,&admin_pwd);
mysql_login->exec();
if(mysql_login->exec()) {
delete mysql_login;
return;
}
delete mysql_login;
@ -231,11 +233,11 @@ void MainWidget::createData()
QMessageBox::information(this,tr("Success"),tr("A new database has been successfully created."));
}
delete db_create;
startDaemons();
updateLabels();
startDaemons();
delete db_create;
}
@ -346,24 +348,52 @@ void MainWidget::resizeEvent(QResizeEvent *e)
}
int MainWidget::statusDaemons(QString service)
{
QProcess statusProcess(this);
QStringList args;
args << "status" << service;
statusProcess.start("systemctl", args);
statusProcess.waitForFinished();
return statusProcess.exitCode();
}
void MainWidget::stopDaemons()
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
if(!statusDaemons("rivendell")) {
QProcess stopProcess(this);
QStringList args;
args << "stop" << "rivendell";
stopProcess.start("systemctl", args);
stopProcess.waitForFinished();
if (!stopProcess.exitCode()) {
db_daemon_start_needed=true;
}
}
QApplication::restoreOverrideCursor();
#if 0
if(system("/usr/bin/systemctl status rivendell")==0) {
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
system("/usr/bin/systemctl stop rivendell");
QApplication::restoreOverrideCursor();
db_daemon_start_needed=true;
}
#endif
}
void MainWidget::startDaemons()
{
if(db_daemon_start_needed) {
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
system("/usr/bin/systemctl start rivendell");
QApplication::restoreOverrideCursor();
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
if(statusDaemons("rivendell")) {
QProcess startProcess(this);
QStringList args;
args << "start" << "rivendell";
startProcess.start("systemctl", args);
startProcess.waitForFinished();
}
QApplication::restoreOverrideCursor();
}

View File

@ -46,6 +46,7 @@ class MainWidget : public QWidget
QSizePolicy sizePolicy() const;
private slots:
int statusDaemons(QString service);
void stopDaemons();
void startDaemons();
void createData();