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

* Added a 'CLOCK_LINES' table to the database.
	* Incremented the database version to 291.
	* Removed the 'RDClock::tableName()' method.
This commit is contained in:
Fred Gleason 2018-07-06 13:52:35 -04:00
parent bd5bd2246b
commit 0c17eb841a
15 changed files with 185 additions and 86 deletions

View File

@ -17102,3 +17102,7 @@
* Fixed a bug in rddbmgr(8) that caused the 'EVENT_LINES'
table to be created with the incorrect engine type when using
'--modify'.
2018-07-07 Fred Gleason <fredg@paravelsystems.com>
* Added a 'CLOCK_LINES' table to the database.
* Incremented the database version to 291.
* Removed the 'RDClock::tableName()' method.

View File

@ -27,6 +27,7 @@ EXTRA_DIST = audio_cards.txt\
cart.txt\
cartslots.txt\
clipboard.txt\
clock_lines.txt\
clock_perms.txt\
copy_splits.txt\
cut_events.txt\

View File

@ -0,0 +1,12 @@
CLOCK_LINES Table Layout for Rivendell
The CLOCK_PERMS table holds per-line data for clocks in RDLogManager.
FIELD NAME TYPE REMARKS
---------------------------------------------------------------
ID int(10) unsigned Primary key, auto increment
CLOCK_NAME char(64) From CLOCKS.NAME
EVENT_NAME char(64) From EVENTS.NAME
START_TIME int(11)
LENGTH int(11)

View File

@ -24,7 +24,7 @@
/*
* Current Database Version
*/
#define RD_VERSION_DATABASE 290
#define RD_VERSION_DATABASE 291
#endif // DBVERSION_H

View File

@ -2,7 +2,7 @@
//
// Abstract a Rivendell Log Manager Clock.
//
// (C) Copyright 2002-2004,2008,2016 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2004,2008,2016-2018 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@ -40,8 +40,6 @@ QString RDClock::name() const
void RDClock::setName(const QString &name)
{
clock_name=name;
clock_name_esc=name;
clock_name_esc.replace(" ","_");
}
@ -151,9 +149,13 @@ bool RDClock::load()
clock_remarks=q->value(3).toString();
delete q;
sql=QString().sprintf("select EVENT_NAME,START_TIME,LENGTH from %s_CLK\
order by ID",
(const char *)clock_name_esc);
sql=QString("select ")+
"EVENT_NAME,"+ // 00
"START_TIME,"+ // 01
"LENGTH "+ // 02
"from CLOCK_LINES where "+
"CLOCK_NAME=\""+RDEscapeString(clock_name)+"\" "+
"order by START_TIME";
q=new RDSqlQuery(sql);
while(q->next()) {
clock_events.push_back(RDEventLine());
@ -186,7 +188,8 @@ bool RDClock::save()
(const char *)clock_name);
q=new RDSqlQuery(sql);
delete q;
sql=QString().sprintf("delete from %s_CLK",(const char *)clock_name_esc);
sql=QString("delete from CLOCK_LINES where ")+
"CLOCK_NAME=\""+RDEscapeString(clock_name)+"\"";
q=new RDSqlQuery(sql);
delete q;
}
@ -204,17 +207,16 @@ bool RDClock::save()
q=new RDSqlQuery(sql);
delete q;
}
sql=QString().sprintf("delete from %s_CLK",
(const char *)clock_name_esc);
sql=QString("delete from CLOCK_LINES where ")+
"CLOCK_NAME=\""+RDEscapeString(clock_name)+"\"";
q=new RDSqlQuery(sql);
delete q;
for(unsigned i=0;i<clock_events.size();i++) {
sql=QString().sprintf("insert into %s_CLK set EVENT_NAME=\"%s\",\
START_TIME=%d,LENGTH=%d",
(const char *)clock_name_esc,
(const char *)clock_events[i].name(),
QTime().msecsTo(clock_events[i].startTime()),
clock_events[i].length());
sql=QString("insert into CLOCK_LINES set ")+
"CLOCK_NAME=\""+RDEscapeString(clock_name)+"\","+
"EVENT_NAME=\""+RDEscapeString(clock_events[i].name())+"\","+
QString().sprintf("START_TIME=%d,",QTime().msecsTo(clock_events[i].startTime()))+
QString().sprintf("LENGTH=%d",clock_events[i].length());
q=new RDSqlQuery(sql);
delete q;
}
@ -307,29 +309,23 @@ bool RDClock::generateLog(int hour,const QString &logname,
RDSqlQuery *q;
RDEventLine eventline;
sql=QString().sprintf("select EVENT_NAME,START_TIME,LENGTH from %s_CLK\
order by START_TIME",
(const char *)clock_name_esc);
sql=QString("select ")+
"EVENT_NAME,"+ // 00
"START_TIME,"+ // 01
"LENGTH "+ // 02
"from CLOCK_LINES where "+
"CLOCK_NAME=\""+RDEscapeString(clock_name)+"\" "+
"order by START_TIME";
q=new RDSqlQuery(sql);
while(q->next()) {
eventline.setName(q->value(0).toString());
eventline.load();
// eventline.setStartTime(q->value(1).toTime().addSecs(3600*hour));
eventline.setStartTime(QTime().addMSecs(q->value(1).toInt()).
addSecs(3600*hour));
eventline.setLength(q->value(2).toInt());
eventline.generateLog(logname,svc_name,errors,artistsep,clock_name_esc);
eventline.generateLog(logname,svc_name,errors,artistsep,clock_name);
eventline.clear();
}
delete q;
return true;
}
QString RDClock::tableName(const QString &name)
{
QString ret=name;
ret.replace(" ","_");
return ret+"_CLK";
}

View File

@ -2,7 +2,7 @@
//
// Abstract a Rivendell Log Manager Clock
//
// (C) Copyright 2002-2004,2016 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2004,2016-2018 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@ -55,11 +55,9 @@ class RDClock
bool validate(const QTime &start_time,int length,int except_line=-1);
bool generateLog(int hour,const QString &logname,const QString &svc_name,
QString *errors);
static QString tableName(const QString &name);
private:
QString clock_name;
QString clock_name_esc;
QString clock_short_name;
QColor clock_color;
QString clock_remarks;
@ -68,4 +66,4 @@ class RDClock
bool rules_modified;
};
#endif
#endif // RDCLOCK_H

View File

@ -33,7 +33,7 @@ void RDCreateLogTable(const QString &name,RDConfig *config)
delete q;
}
*/
/*
QString RDCreateLogTableSql(QString name,RDConfig *config)
{
return QString("create table if not exists `")+name+"`"+
@ -81,8 +81,8 @@ QString RDCreateLogTableSql(QString name,RDConfig *config)
"index LABEL_IDX (LABEL))"+
config->createTablePostfix();
}
*/
/*
QString RDCreateClockTableSql(QString name,RDConfig *config)
{
return QString("create table `")+name+"` ("+
@ -93,7 +93,7 @@ QString RDCreateClockTableSql(QString name,RDConfig *config)
"INDEX EVENT_NAME_IDX (EVENT_NAME))"+
config->createTablePostfix();
}
*/
/*
QString RDCreateReconciliationTableSql(QString name,RDConfig *config)
{

View File

@ -24,8 +24,8 @@
#define RDCREATE_LOG_H
//void RDCreateLogTable(const QString &name,RDConfig *config);
QString RDCreateLogTableSql(QString name,RDConfig *config);
QString RDCreateClockTableSql(QString name,RDConfig *config);
//QString RDCreateLogTableSql(QString name,RDConfig *config);
//QString RDCreateClockTableSql(QString name,RDConfig *config);
//QString RDCreateReconciliationTableSql(QString name,RDConfig *config);
QString RDCreateStackTableSql(QString name,RDConfig *config);

View File

@ -499,10 +499,6 @@ void EditClock::saveAsData()
}
delete q;
edit_clock->setName(clockname);
sql=RDCreateClockTableSql(RDClock::tableName(clockname),rda->config());
q=new RDSqlQuery(sql);
delete q;
Save();
edit_new_clocks->push_back(clockname);
@ -766,12 +762,12 @@ void EditClock::AbandonClock(QString name)
if(name==edit_name) {
return;
}
QString sql=QString().sprintf("delete from CLOCKS where NAME=\"%s\"",
(const char *)name);
RDSqlQuery *q=new RDSqlQuery(sql);
delete q;
rda->dropTable(RDClock::tableName(name));
QString sql=QString("delete from CLOCKS where ")+
"NAME=\""+RDEscapeString(name)+"\"";
RDSqlQuery::apply(sql);
sql=QString("delete from CLOCK_LINES where ")+
"CLOCK_NAME=\""+RDEscapeString(name)+"\"";
RDSqlQuery::apply(sql);
}

View File

@ -214,8 +214,7 @@ QSizePolicy ListClocks::sizePolicy() const
void ListClocks::addData()
{
QString clockname;
QString clockname_esc;
QString clockname;
QString sql;
RDSqlQuery *q;
RDSqlQuery *q1;
@ -243,15 +242,11 @@ void ListClocks::addData()
"ARTISTSEP=15";
q=new RDSqlQuery(sql);
delete q;
sql=RDCreateClockTableSql(RDClock::tableName(clockname),rda->config());
q=new RDSqlQuery(sql);
delete q;
EditClock *clock_dialog=new EditClock(clockname,true,&new_clocks,this);
if(clock_dialog->exec()<0) {
clockname_esc=clockname;
clockname_esc.replace(" ","_");
clockname_esc+="_CLK";
rda->dropTable(clockname_esc);
sql=QString("delete from CLOCK_LINES where ")+
"CLOCK_NAME=\""+RDEscapeString(clockname)+"\"";
RDSqlQuery::apply(sql);
sql=QString().sprintf("delete from CLOCKS where NAME=\"%s\"",
(const char *)clockname);
q=new RDSqlQuery(sql);
@ -383,15 +378,15 @@ void ListClocks::renameData()
//
// Rename Meta Table
//
sql=QString("update CLOCK_LINES set ")+
"CLOCK_NAME=\""+RDEscapeString(new_name)+"\" where "+
"CLOCK_NAME=\""+RDEscapeString(item->text(0))+"\"";
q=new RDSqlQuery(sql);
delete q;
QString old_name_esc=item->text(0);
old_name_esc.replace(" ","_");
QString new_name_esc=new_name;
new_name_esc.replace(" ","_");
sql=QString().sprintf("alter table %s_CLK rename to %s_CLK",
(const char *)old_name_esc,
(const char *)new_name_esc);
q=new RDSqlQuery(sql);
delete q;
sql=QString().sprintf("alter table %s_RULES rename to %s_RULES",
(const char *)old_name_esc,
(const char *)new_name_esc);
@ -629,9 +624,10 @@ void ListClocks::DeleteClock(QString clockname)
//
sql=QString().sprintf("delete from CLOCKS where NAME=\"%s\"",
(const char *)clockname);
q=new RDSqlQuery(sql);
delete q;
rda->dropTable(base_name+"_CLK");
RDSqlQuery::apply(sql);
sql=QString("delete from CLOCK_LINES where ")+
"CLOCK_NAME=\""+RDEscapeString(clockname)+"\"";
RDSqlQuery::apply(sql);
rda->dropTable(base_name+"_RULES");
}

View File

@ -345,11 +345,10 @@ void ListEvents::renameData()
while(q->next()) {
clock_name_esc=q->value(0).toString();
clock_name_esc.replace(" ","_");
sql=QString().sprintf("update %s_CLK set EVENT_NAME=\"%s\"\
where EVENT_NAME=\"%s\"",
(const char *)clock_name_esc,
(const char *)new_name,
(const char *)item->text(0));
sql=QString("update CLOCK_LINES set ")+
"CLOCK_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+
"EVENT_NAME=\""+RDEscapeString(new_name)+"\" where "+
"EVENT_NAME=\""+RDEscapeString(item->text(0))+"\"";
q1=new RDSqlQuery(sql);
delete q1;
}
@ -527,16 +526,13 @@ int ListEvents::ActiveEvents(QString event_name,QString *clock_list)
int n=0;
QString sql;
RDSqlQuery *q,*q1;
QString clockname;
sql="select NAME from CLOCKS";
q=new RDSqlQuery(sql);
while(q->next()) {
clockname=q->value(0).toString();
clockname.replace(" ","_");
sql=QString().sprintf("select EVENT_NAME from %s_CLK\
where EVENT_NAME=\"%s\"",(const char *)clockname,
(const char *)event_name);
sql=QString("select EVENT_NAME from CLOCK_LINES where ")+
"CLOCK_NAME=\""+RDEscapeString(q->value(0).toString())+"\" && "+
"EVENT_NAME=\""+RDEscapeString(event_name)+"\"";
q1=new RDSqlQuery(sql);
if(q1->first()) {
*clock_list+=
@ -554,7 +550,6 @@ void ListEvents::DeleteEvent(QString event_name)
{
QString sql;
RDSqlQuery *q,*q1;
QString clockname;
QString base_name=event_name;
base_name.replace(" ","_");
@ -564,11 +559,9 @@ void ListEvents::DeleteEvent(QString event_name)
sql="select NAME from CLOCKS";
q=new RDSqlQuery(sql);
while(q->next()) {
clockname=q->value(0).toString();
clockname.replace(" ","_");
sql=QString().sprintf("delete from %s_CLK\
where EVENT_NAME=\"%s\"",(const char *)clockname,
(const char *)event_name);
sql=QString("delete from CLOCK_LINES where ")+
"CLOCK_NAME=\""+RDEscapeString(q->value(0).toString())+"\" && "+
"EVENT_NAME=\""+RDEscapeString(event_name)+"\"";
q1=new RDSqlQuery(sql);
delete q1;
}

View File

@ -242,6 +242,10 @@ void MainObject::CheckOrphanedTracks() const
void MainObject::CheckClocks() const
{
//
// FIXME: This entire check needs to be rewritten!
//
/*
QString sql;
QSqlQuery *q;
QSqlQuery *q1;
@ -299,11 +303,16 @@ void MainObject::CheckClocks() const
delete q1;
}
delete q;
*/
}
void MainObject::CheckEvents() const
{
//
// FIXME: This whole check needs to be rewritten!
//
/*
QString sql;
QSqlQuery *q;
QSqlQuery *q1;
@ -351,6 +360,7 @@ void MainObject::CheckEvents() const
delete q1;
}
delete q;
*/
}

View File

@ -38,6 +38,55 @@ bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg) co
//
//
// Revert 291
//
if((cur_schema==291)&&(set_schema<cur_schema)) {
sql=QString("select NAME from CLOCKS");
q=new RDSqlQuery(sql);
while(q->next()) {
QString tablename=q->value(0).toString()+"_CLK";
tablename.replace(" ","_");
sql=QString("create table `")+tablename+"` ("+
"ID int unsigned auto_increment not null primary key,"+
"EVENT_NAME char(64) not null,"+
"START_TIME int not null,"+
"LENGTH int not null,"+
"INDEX EVENT_NAME_IDX (EVENT_NAME))"+
db_table_create_postfix;
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
sql=QString("select ")+
"EVENT_NAME,"+ // 00
"START_TIME,"+ // 01
"LENGTH "+ // 02
"from CLOCK_LINES where "+
"CLOCK_NAME=\""+RDEscapeString(q->value(0).toString())+"\" "+
"order by START_TIME";
q1=new RDSqlQuery(sql);
while(q1->next()) {
sql=QString("insert into `")+tablename+"` set "+
"EVENT_NAME=\""+RDEscapeString(q1->value(0).toString())+"\","+
QString().sprintf("START_TIME=%d,",q1->value(1).toInt())+
QString().sprintf("LENGTH=%d",q1->value(2).toInt());
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
}
delete q1;
}
delete q;
sql=QString("drop table CLOCK_LINES");
RDSqlQuery::apply(sql);
cur_schema--;
}
//
// Revert 290
//
@ -202,7 +251,6 @@ bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg) co
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
cur_schema--;
}

View File

@ -132,7 +132,7 @@ void MainObject::InitializeSchemaMap() {
global_version_map["2.17"]=268;
global_version_map["2.18"]=272;
global_version_map["2.19"]=275;
global_version_map["2.20"]=290;
global_version_map["2.20"]=291;
}

View File

@ -7566,6 +7566,51 @@ bool MainObject::UpdateSchema(int cur_schema,int set_schema,QString *err_msg) co
}
delete q;
cur_schema++;
}
if((cur_schema<291)&&(set_schema>cur_schema)) {
sql=QString("create table if not exists CLOCK_LINES (")+
"ID int unsigned auto_increment not null primary key,"+
"CLOCK_NAME char(64) not null,"+
"EVENT_NAME char(64) not null,"+
"START_TIME int not null,"+
"LENGTH int not null,"+
"unique index CLOCK_NAME_START_TIME_IDX (CLOCK_NAME,START_TIME))"+
db_table_create_postfix;
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
sql=QString("select NAME from CLOCKS");
q=new RDSqlQuery(sql);
while(q->next()) {
QString tablename=q->value(0).toString()+"_CLK";
tablename.replace(" ","_");
sql=QString("select ")+
"EVENT_NAME,"+ // 00
"START_TIME,"+ // 01
"LENGTH "+ // 02
"from `"+tablename+"` "+
"order by START_TIME";
q1=new RDSqlQuery(sql);
while(q1->next()) {
sql=QString("insert into CLOCK_LINES set ")+
"CLOCK_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+
"EVENT_NAME=\""+RDEscapeString(q1->value(0).toString())+"\","+
QString().sprintf("START_TIME=%d,",q1->value(1).toInt())+
QString().sprintf("LENGTH=%d",q1->value(2).toInt());
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
}
delete q1;
sql=QString("drop table `")+tablename+"`";
if(!RDSqlQuery::apply(sql,err_msg)) {
return false;
}
}
delete q;
cur_schema++;
}