diff --git a/ChangeLog b/ChangeLog index 32939483..a7706039 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16920,3 +16920,27 @@ 2018-05-29 Fred Gleason * Fixed a regression that caused meters to fail when rdvairplayd(8) was operated with invalid channel assignments. +2018-05-29 Fred Gleason + * Dropped the 'RDAIRPLAY.INSTANCE' field from the database. + * Dropped the 'RDAIRPLAY.CARD' fields from the database. + * Dropped the 'RDAIRPLAY.PORT' fields from the database. + * Dropped the 'RDAIRPLAY.START_RML' fields from the database. + * Dropped the 'RDAIRPLAY.STOP_RML' fields from the database. + * Dropped the 'RDAIRPLAY.OP_MODE' field from the database. + * Dropped the 'RDAIRPLAY.START_MODE' field from the database. + * Dropped the 'RDPANEL.INSTANCE' field from the database. + * Dropped the 'RDPANEL.CARD' fields from the database. + * Dropped the 'RDPANEL.PORT' fields from the database. + * Dropped the 'RDPANEL.START_RML' fields from the database. + * Dropped the 'RDPANEL.STOP_RML' fields from the database. + * Altered the default value of the 'MATRICES.PORT field to 0. + * Altered the default value of the 'MATRICES.PORT_2 field to 0. + * Altered the default value of the 'MATRICES.INPUTS field to 0. + * Altered the default value of the 'MATRICES.OUTPUTS field to 0. + * Altered the default value of the 'MATRICES.GPIS field to 0. + * Altered the default value of the 'MATRICES.GPOS field to 0. + * Incremented the database version to 284. + * Fixed bugs in rdcatch(1) that incorrectly escaped host + names in SQL calls. + * Fixed a bug in 'RDLog::create()' that failed to initialize + the modified datetime correctly. diff --git a/docs/tables/rd_airplay.txt b/docs/tables/rd_airplay.txt index 82cc8578..2979c344 100644 --- a/docs/tables/rd_airplay.txt +++ b/docs/tables/rd_airplay.txt @@ -6,11 +6,8 @@ Following is the layout of a record in the RDAIRPLAY table: FIELD NAME TYPE REMARKS ------------------------------------------------------------------------------ ID int(10) unsigned * Primary key, Auto Increment -STATION char(40) Workstation, Indexed SEGUE_LENGTH int(11) TRANS_LENGTH int(11) -OP_MODE int(11) *** RETIRED @ DB v233 *** -START_MODE int(11) *** RETIRED @ DB v233 *** LOG_MODE_STYLE int(11) 0=Unified, 1=Independent PIE_COUNT_LENGTH int(11) PIE_COUNT_ENDPOINT int(11) 0=EOF, 1=Segue Point diff --git a/lib/dbversion.h b/lib/dbversion.h index e3bba700..b1360460 100644 --- a/lib/dbversion.h +++ b/lib/dbversion.h @@ -24,7 +24,7 @@ /* * Current Database Version */ -#define RD_VERSION_DATABASE 283 +#define RD_VERSION_DATABASE 284 #endif // DBVERSION_H diff --git a/lib/rdlog.cpp b/lib/rdlog.cpp index 756f0ba1..80ab1d0f 100644 --- a/lib/rdlog.cpp +++ b/lib/rdlog.cpp @@ -520,6 +520,7 @@ bool RDLog::create(const QString &name,const QString &svc_name, "DESCRIPTION=\""+RDEscapeString(name)+" log \","+ "ORIGIN_USER=\""+RDEscapeString(user_name)+"\","+ "ORIGIN_DATETIME=now(),"+ + "MODIFIED_DATETIME=now(),"+ "LINK_DATETIME=now(),"+ "SERVICE=\""+RDEscapeString(svc_name)+"\""; if(shelflife>=0) { diff --git a/rdadmin/createdb.cpp b/rdadmin/createdb.cpp index 0605c5d9..3d722e37 100644 --- a/rdadmin/createdb.cpp +++ b/rdadmin/createdb.cpp @@ -991,50 +991,8 @@ bool CreateDb(QString name,QString pwd,RDConfig *config) sql=QString("create table if not exists RDAIRPLAY (")+ "ID int not null primary key auto_increment,"+ "STATION char(40) not null,"+ - "CARD0 int default 0,"+ - "PORT0 int default 0,"+ - "START_RML0 char(255),"+ - "STOP_RML0 char(255),"+ - "CARD1 int default 0,"+ - "PORT1 int default 0,"+ - "START_RML1 char(255),"+ - "STOP_RML1 char(255),"+ - "CARD2 int default 0,"+ - "PORT2 int default 0,"+ - "START_RML2 char(255),"+ - "STOP_RML2 char(255),"+ - "CARD3 int default 0,"+ - "PORT3 int default 0,"+ - "START_RML3 char(255),"+ - "STOP_RML3 char(255),"+ - "CARD4 int default 0,"+ - "PORT4 int default 0,"+ - "START_RML4 char(255),"+ - "STOP_RML4 char(255),"+ - "CARD5 int default 0,"+ - "PORT5 int default 0,"+ - "START_RML5 char(255),"+ - "STOP_RML5 char(255),"+ - "CARD6 int default 0,"+ - "PORT6 int default 0,"+ - "START_RML6 char(255),"+ - "STOP_RML6 char(255),"+ - "CARD7 int default 0,"+ - "PORT7 int default 0,"+ - "START_RML7 char(255),"+ - "STOP_RML7 char(255),"+ - "CARD8 int default 0,"+ - "PORT8 int default 0,"+ - "START_RML8 char(255),"+ - "STOP_RML8 char(255),"+ - "CARD9 int default 0,"+ - "PORT9 int default 0,"+ - "START_RML9 char(255),"+ - "STOP_RML9 char(255),"+ "SEGUE_LENGTH int default 250,"+ "TRANS_LENGTH int default 50,"+ - "OP_MODE int default 2,"+ - "START_MODE int default 0,"+ "LOG_MODE_STYLE int default 0,"+ "PIE_COUNT_LENGTH int default 15000,"+ "PIE_COUNT_ENDPOINT int default 0,"+ @@ -1102,8 +1060,8 @@ bool CreateDb(QString name,QString pwd,RDConfig *config) "PORT_TYPE int default 0,"+ "PORT_TYPE_2 int default 0,"+ "CARD int default -1,"+ - "PORT int not null,"+ - "PORT_2 int not null,"+ + "PORT int not null default 0,"+ + "PORT_2 int not null default 0,"+ "IP_ADDRESS char(16),"+ "IP_ADDRESS_2 char(16),"+ "IP_PORT int,"+ @@ -1117,10 +1075,10 @@ bool CreateDb(QString name,QString pwd,RDConfig *config) "START_CART_2 int unsigned,"+ "STOP_CART_2 int unsigned,"+ "GPIO_DEVICE char(255),"+ - "INPUTS int not null,"+ - "OUTPUTS int not null,"+ - "GPIS int not null,"+ - "GPOS int not null,"+ + "INPUTS int not null default 0,"+ + "OUTPUTS int not null default 0,"+ + "GPIS int not null default 0,"+ + "GPOS int not null default 0,"+ "FADERS int default 0,"+ "DISPLAYS int default 0,"+ "index MATRIX_IDX (STATION_NAME,MATRIX))"+ @@ -1509,31 +1467,6 @@ bool CreateDb(QString name,QString pwd,RDConfig *config) sql=QString("create table if not exists RDPANEL (")+ "ID int not null primary key auto_increment,"+ "STATION char(40) not null,"+ - "INSTANCE int unsigned not null,"+ - "CARD2 int default 0,"+ - "PORT2 int default 0,"+ - "START_RML2 char(255),"+ - "STOP_RML2 char(255),"+ - "CARD3 int default 0,"+ - "PORT3 int default 0,"+ - "START_RML3 char(255),"+ - "STOP_RML3 char(255),"+ - "CARD6 int default 0,"+ - "PORT6 int default 0,"+ - "START_RML6 char(255),"+ - "STOP_RML6 char(255),"+ - "CARD7 int default 0,"+ - "PORT7 int default 0,"+ - "START_RML7 char(255),"+ - "STOP_RML7 char(255),"+ - "CARD8 int default 0,"+ - "PORT8 int default 0,"+ - "START_RML8 char(255),"+ - "STOP_RML8 char(255),"+ - "CARD9 int default 0,"+ - "PORT9 int default 0,"+ - "START_RML9 char(255),"+ - "STOP_RML9 char(255),"+ "STATION_PANELS int default 3,"+ "USER_PANELS int default 3,"+ "CLEAR_FILTER enum('N','Y') default 'N',"+ @@ -8397,6 +8330,122 @@ int UpdateDb(int ver,RDConfig *config) delete q; } + if(ver<284) { + sql=QString("alter table RDAIRPLAY drop column INSTANCE"); + q=new RDSqlQuery(sql,false); + delete q; + + for(int i=0;i<10;i++) { + sql=QString("alter table RDAIRPLAY ")+ + QString().sprintf("drop column CARD%d",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDAIRPLAY ")+ + QString().sprintf("drop column PORT%d",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDAIRPLAY ")+ + QString().sprintf("drop column START_RML%d",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDAIRPLAY ")+ + QString().sprintf("drop column STOP_RML%d",i); + q=new RDSqlQuery(sql,false); + delete q; + } + + sql=QString("alter table RDAIRPLAY drop column OP_MODE"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDAIRPLAY drop column START_MODE"); + q=new RDSqlQuery(sql,false); + delete q; + + + sql=QString("alter table RDPANEL drop column INSTANCE"); + q=new RDSqlQuery(sql,false); + delete q; + + for(int i=2;i<4;i++) { + sql=QString("alter table RDPANEL ")+ + QString().sprintf("drop column CARD%d",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDPANEL ")+ + QString().sprintf("drop column PORT%d",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDPANEL ")+ + QString().sprintf("drop column START_RML%d",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDPANEL ")+ + QString().sprintf("drop column STOP_RML%d",i); + q=new RDSqlQuery(sql,false); + delete q; + } + + for(int i=6;i<10;i++) { + sql=QString("alter table RDPANEL ")+ + QString().sprintf("drop column CARD%d",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDPANEL ")+ + QString().sprintf("drop column PORT%d",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDPANEL ")+ + QString().sprintf("drop column START_RML%d",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDPANEL ")+ + QString().sprintf("drop column STOP_RML%d",i); + q=new RDSqlQuery(sql,false); + delete q; + } + + sql=QString("alter table MATRICES alter column PORT set default 0"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table MATRICES alter column PORT_2 set default 0"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table MATRICES alter column INPUTS set default 0"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table MATRICES alter column OUTPUTS set default 0"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table MATRICES alter column GPIS set default 0"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table MATRICES alter column GPOS set default 0"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table REPLICATORS alter column TYPE_ID set default 0"); + q=new RDSqlQuery(sql,false); + delete q; + } + + + + // diff --git a/rdcatch/rdcatch.cpp b/rdcatch/rdcatch.cpp index 7e9b5c39..65a962e5 100644 --- a/rdcatch/rdcatch.cpp +++ b/rdcatch/rdcatch.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -291,9 +292,13 @@ MainWidget::MainWidget(QWidget *parent) catch_connect.back()->connector()-> connectHost(q->value(1).toString(),RDCATCHD_TCP_PORT, rda->config()->password()); - sql=QString().sprintf("select CHANNEL,MON_PORT_NUMBER from DECKS \ -where (CARD_NUMBER!=-1)&&(PORT_NUMBER!=-1)&&(CHANNEL>0)&&(STATION_NAME=\"%s\") \ -order by CHANNEL",(const char *)q->value(0).toString().lower()); + sql=QString("select ")+ + "CHANNEL,"+ // 00 + "MON_PORT_NUMBER "+ // 01 + "from DECKS where "+ + "(CARD_NUMBER!=-1)&&(PORT_NUMBER!=-1)&&(CHANNEL>0)&&"+ + "(STATION_NAME=\""+RDEscapeString(q->value(0).toString().lower())+"\") "+ + "order by CHANNEL"; q1=new RDSqlQuery(sql); while(q1->next()) { catch_connect.back()->chan.push_back(q1->value(0).toUInt()); @@ -1585,7 +1590,9 @@ int MainWidget::AddRecord() n=1; } delete q; - sql=QString().sprintf("insert into RECORDINGS set ID=%d",n); + sql=QString("insert into RECORDINGS set ")+ + QString().sprintf("ID=%d,",n)+ + "STATION_NAME=\""+RDEscapeString(rda->station()->name())+"\""; q=new RDSqlQuery(sql); delete q; return n; @@ -1846,11 +1853,12 @@ void MainWidget::RefreshList() l->setText(6,QString(). sprintf("%s %s",(const char *)str, (const char *)q->value(5).toString())); - sql=QString().sprintf("select SWITCH_STATION,SWITCH_MATRIX\ - from DECKS where \ - (STATION_NAME=\"%s\")&&(CHANNEL=%d)", - (const char *)q->value(2).toString(), - q->value(23).toInt()); + sql=QString("select ")+ + "SWITCH_STATION,"+ // 00 + "SWITCH_MATRIX "+ // 01 + "from DECKS where "+ + "(STATION_NAME=\""+RDEscapeString(q->value(2).toString())+"\")&&"+ + QString().sprintf("(CHANNEL=%d)",q->value(23).toInt()); q1=new RDSqlQuery(sql); if(q1->first()) { // Source l->setText(5,GetSourceName(q1->value(0).toString(), @@ -2224,11 +2232,12 @@ void MainWidget::RefreshLine(RDListViewItem *item) q->value(38).toInt())); break; } - sql=QString().sprintf("select SWITCH_STATION,SWITCH_MATRIX\ - from DECKS where \ - (STATION_NAME=\"%s\")&&(CHANNEL=%d)", - (const char *)q->value(2).toString(), - q->value(23).toInt()); + sql=QString("select ")+ + "SWITCH_STATION,"+ // 00 + "SWITCH_MATRIX "+ // 01 + "from DECKS where "+ + "(STATION_NAME=\""+RDEscapeString(q->value(2).toString())+"\")&&"+ + QString().sprintf("(CHANNEL=%d)",q->value(23).toInt()); q1=new RDSqlQuery(sql); if(q1->first()) { item->setText(5,GetSourceName(q1->value(0).toString(), @@ -2481,11 +2490,10 @@ void MainWidget::DisplayExitCode(RDListViewItem *item, QString MainWidget::GetSourceName(QString station,int matrix,int input) { QString input_name; - QString sql=QString().sprintf("select NAME from INPUTS where \ - (STATION_NAME=\"%s\")&&\ - (MATRIX=%d)&&(NUMBER=%d)", - (const char *)station, - matrix,input); + QString sql=QString("select NAME from INPUTS where ")+ + "(STATION_NAME=\""+RDEscapeString(station)+"\")&&"+ + QString().sprintf("(MATRIX=%d)&&",matrix)+ + QString().sprintf("(NUMBER=%d)",input); RDSqlQuery *q=new RDSqlQuery(sql); if(q->first()) { input_name=q->value(0).toString(); @@ -2498,11 +2506,10 @@ QString MainWidget::GetSourceName(QString station,int matrix,int input) QString MainWidget::GetDestinationName(QString station,int matrix,int output) { QString output_name; - QString sql=QString().sprintf("select NAME from OUTPUTS where \ - (STATION_NAME=\"%s\")&&\ - (MATRIX=%d)&&(NUMBER=%d)", - (const char *)station, - matrix,output); + QString sql=QString("select NAME from OUTPUTS where ")+ + "(STATION_NAME=\""+RDEscapeString(station)+"\")&&"+ + QString().sprintf("(MATRIX=%d)&&",matrix)+ + QString().sprintf("(NUMBER=%d)",output); RDSqlQuery *q=new RDSqlQuery(sql); if(q->first()) { output_name=q->value(0).toString(); diff --git a/utils/rdrevert/rdrevert.cpp b/utils/rdrevert/rdrevert.cpp index a7a3baba..f2a79e93 100644 --- a/utils/rdrevert/rdrevert.cpp +++ b/utils/rdrevert/rdrevert.cpp @@ -291,6 +291,10 @@ void MainObject::Revert(int schema) const case 283: Revert283(); break; + + case 284: + Revert284(); + break; } } @@ -1228,6 +1232,130 @@ void MainObject::Revert283() const } +void MainObject::Revert284() const +{ + QString sql; + RDSqlQuery *q; + + sql=QString("alter table RDAIRPLAY add column INSTANCE int unsigned ")+ + "not null default 0 after STATION"; + q=new RDSqlQuery(sql,false); + delete q; + + for(int i=9;i>=0;i--) { + sql=QString("alter table RDAIRPLAY add column ")+ + QString().sprintf("STOP_RML%d char(255) after INSTANCE",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDAIRPLAY add column ")+ + QString().sprintf("START_RML%d char(255) after INSTANCE",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDAIRPLAY add column ")+ + QString().sprintf("PORT%d int default 0 after INSTANCE",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDAIRPLAY add column ")+ + QString().sprintf("CARD%d int default 0 after INSTANCE",i); + q=new RDSqlQuery(sql,false); + delete q; + } + + sql=QString("alter table RDAIRPLAY add column ")+ + "OP_MODE int default 2 after TRANS_LENGTH"; + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDAIRPLAY add column ")+ + "START_MODE int default 0 after OP_MODE"; + q=new RDSqlQuery(sql,false); + delete q; + + + + sql=QString("alter table RDPANEL add column INSTANCE int unsigned ")+ + "not null default 0 after STATION"; + q=new RDSqlQuery(sql,false); + delete q; + + for(int i=9;i>=6;i--) { + sql=QString("alter table RDPANEL add column ")+ + QString().sprintf("STOP_RML%d char(255) after INSTANCE",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDPANEL add column ")+ + QString().sprintf("START_RML%d char(255) after INSTANCE",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDPANEL add column ")+ + QString().sprintf("PORT%d int default 0 after INSTANCE",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDPANEL add column ")+ + QString().sprintf("CARD%d int default 0 after INSTANCE",i); + q=new RDSqlQuery(sql,false); + delete q; + } + for(int i=3;i>=2;i--) { + sql=QString("alter table RDPANEL add column ")+ + QString().sprintf("STOP_RML%d char(255) after INSTANCE",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDPANEL add column ")+ + QString().sprintf("START_RML%d char(255) after INSTANCE",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDPANEL add column ")+ + QString().sprintf("PORT%d int default 0 after INSTANCE",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table RDPANEL add column ")+ + QString().sprintf("CARD%d int default 0 after INSTANCE",i); + q=new RDSqlQuery(sql,false); + delete q; + } + + sql=QString("alter table MATRICES alter column PORT drop default"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table MATRICES alter column PORT_2 drop default"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table MATRICES alter column INPUTS drop default"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table MATRICES alter column OUTPUTS drop default"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table MATRICES alter column GPIS drop default"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table MATRICES alter column GPOS drop default"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table REPLICATORS alter column TYPE_ID drop default"); + q=new RDSqlQuery(sql,false); + delete q; + + SetVersion(283); +} + + int MainObject::GetVersion() const { QString sql; @@ -1274,7 +1402,7 @@ int MainObject::MapSchema(const QString &ver) version_map["2.17"]=268; version_map["2.18"]=272; version_map["2.19"]=275; - version_map["2.20"]=283; + version_map["2.20"]=284; // // Normalize String diff --git a/utils/rdrevert/rdrevert.h b/utils/rdrevert/rdrevert.h index 96c911f7..a6024f9b 100644 --- a/utils/rdrevert/rdrevert.h +++ b/utils/rdrevert/rdrevert.h @@ -79,6 +79,7 @@ class MainObject : public QObject void Revert281() const; void Revert282() const; void Revert283() const; + void Revert284() const; int GetVersion() const; void SetVersion(int schema) const; int MapSchema(const QString &ver);