2018-07-17 Fred Gleason <fredg@paravelsystems.com>

* Fixed a bug in rddgmgr(8) that would cause an abort if a '_STACK'
	table was found missing when updating to schema 293.
This commit is contained in:
Fred Gleason 2018-07-17 15:23:48 +00:00
parent 3c9e8ccb9b
commit 7e9aa59c94
4 changed files with 54 additions and 31 deletions

View File

@ -17133,3 +17133,6 @@
2018-07-16 Fred Gleason <fredg@paravelsystems.com>
* Cleaned up SQL quieries in 'rdcatch/' ensure UTF-8
compatibility.
2018-07-17 Fred Gleason <fredg@paravelsystems.com>
* Fixed a bug in rddgmgr(8) that would cause an abort if a '_STACK'
table was found missing when updating to schema 293.

View File

@ -371,6 +371,22 @@ void MainObject::WriteSchemaVersion(int ver) const
}
bool MainObject::TableExists(const QString &tbl_name) const
{
QString sql;
RDSqlQuery *q;
bool ret=false;
sql=QString("show tables where ")+
"Tables_in_"+db_config->mysqlDbname()+"=\""+RDEscapeString(tbl_name)+"\"";
q=new RDSqlQuery(sql,false);
ret=q->first();
delete q;
return ret;
}
bool MainObject::DropTable(const QString &tbl_name,QString *err_msg) const
{
QString sql;

View File

@ -113,6 +113,7 @@ class MainObject : public QObject
bool PrintStatus(QString *err_msg) const;
void WriteSchemaVersion(int ver) const;
bool TableExists(const QString &tbl_name) const;
bool DropTable(const QString &tbl_name,QString *err_msg=NULL) const;
Command db_command;
QString db_mysql_hostname;

View File

@ -7742,40 +7742,43 @@ bool MainObject::UpdateSchema(int cur_schema,int set_schema,QString *err_msg) co
while(q->next()) {
QString tablename=q->value(0).toString()+"_STACK";
tablename.replace(" ","_");
//
// 9/14/1752 is the earliest valid QDate
//
sql=QString("update `")+tablename+"` set "+
"SCHEDULED_AT=\"1752-09-14 00:00:00\" where "+
"SCHEDULED_AT<\"1752-09-14 00:00:00\"";
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
sql=QString("select ")+
"SCHED_STACK_ID,"+ // 00
"CART,"+ // 01
"ARTIST,"+ // 02
"SCHED_CODES,"+ // 03
"SCHEDULED_AT "+ // 04
"from `"+tablename+"` "+
"order by SCHEDULED_AT";
q1=new RDSqlQuery(sql,false);
while(q1->next()) {
sql=QString("insert into STACK_LINES set ")+
"SERVICE_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+
QString().sprintf("SCHED_STACK_ID=%u,",q1->value(0).toUInt())+
QString().sprintf("CART=%u,",q1->value(1).toUInt())+
"ARTIST=\""+RDEscapeString(q1->value(2).toString())+"\","+
"SCHED_CODES=\""+RDEscapeString(q1->value(3).toString())+"\","+
"SCHEDULED_AT=\""+RDEscapeString(q1->value(4).toDateTime().
toString("yyyy-MM-dd hh:mm:ss"))+"\"";
if(TableExists(tablename)) {
//
// 9/14/1752 is the earliest valid QDate
//
sql=QString("update `")+tablename+"` set "+
"SCHEDULED_AT=\"1752-09-14 00:00:00\" where "+
"SCHEDULED_AT<\"1752-09-14 00:00:00\"";
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
}
delete q1;
if(!DropTable(tablename,err_msg)) {
return false;
sql=QString("select ")+
"SCHED_STACK_ID,"+ // 00
"CART,"+ // 01
"ARTIST,"+ // 02
"SCHED_CODES,"+ // 03
"SCHEDULED_AT "+ // 04
"from `"+tablename+"` "+
"order by SCHEDULED_AT";
q1=new RDSqlQuery(sql,false);
while(q1->next()) {
sql=QString("insert into STACK_LINES set ")+
"SERVICE_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+
QString().sprintf("SCHED_STACK_ID=%u,",q1->value(0).toUInt())+
QString().sprintf("CART=%u,",q1->value(1).toUInt())+
"ARTIST=\""+RDEscapeString(q1->value(2).toString())+"\","+
"SCHED_CODES=\""+RDEscapeString(q1->value(3).toString())+"\","+
"SCHEDULED_AT=\""+RDEscapeString(q1->value(4).toDateTime().
toString("yyyy-MM-dd hh:mm:ss"))+"\"";
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
}
delete q1;
if(!DropTable(tablename,err_msg)) {
return false;
}
}
}
delete q;