// revertschema.cpp // // Revert Rivendell DB schema // // (C) Copyright 2018 Fred Gleason // // 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 // published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public // License along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // #include #include #include "rddbmgr.h" bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg) const { QString sql; RDSqlQuery *q; QString tablename; // // Maintainer's Note: // // When adding a schema reversion here, be sure also to implement the // corresponding update in updateschema.cpp! // // // Revert 287 // if((cur_schema==287)&&(set_schema=0;i--) { sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("STOP_RML%d char(255) after INSTANCE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("START_RML%d char(255) after INSTANCE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("PORT%d int default 0 after INSTANCE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("CARD%d int default 0 after INSTANCE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } } sql=QString("alter table RDAIRPLAY add column ")+ "OP_MODE int default 2 after TRANS_LENGTH"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ "START_MODE int default 0 after OP_MODE"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDPANEL add column INSTANCE int unsigned ")+ "not null default 0 after STATION"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } for(int i=9;i>=6;i--) { sql=QString("alter table RDPANEL add column ")+ QString().sprintf("STOP_RML%d char(255) after INSTANCE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDPANEL add column ")+ QString().sprintf("START_RML%d char(255) after INSTANCE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDPANEL add column ")+ QString().sprintf("PORT%d int default 0 after INSTANCE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDPANEL add column ")+ QString().sprintf("CARD%d int default 0 after INSTANCE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } } for(int i=3;i>=2;i--) { sql=QString("alter table RDPANEL add column ")+ QString().sprintf("STOP_RML%d char(255) after INSTANCE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDPANEL add column ")+ QString().sprintf("START_RML%d char(255) after INSTANCE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDPANEL add column ")+ QString().sprintf("PORT%d int default 0 after INSTANCE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDPANEL add column ")+ QString().sprintf("CARD%d int default 0 after INSTANCE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } } sql=QString("alter table MATRICES alter column PORT drop default"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table MATRICES alter column PORT_2 drop default"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table MATRICES alter column INPUTS drop default"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table MATRICES alter column OUTPUTS drop default"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table MATRICES alter column GPIS drop default"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table MATRICES alter column GPOS drop default"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table REPLICATORS alter column TYPE_ID drop default"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } cur_schema--; } // // Revert 283 // if((cur_schema==283)&&(set_schemanext()) { for(int i=0;i<8;i++) { sql=QString("insert into AUDIO_PORTS set ")+ "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+ QString().sprintf("CARD_NUMBER=%d",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } } } delete q; sql=QString("select ")+ "STATION_NAME,"+ // 00 "CARD_NUMBER,"+ // 01 "PORT_NUMBER,"+ // 02 "LEVEL,"+ // 03 "TYPE,"+ // 04 "MODE "+ // 05 "from AUDIO_INPUTS where PORT_NUMBER<8"; q=new RDSqlQuery(sql,false); while(q->next()) { sql=QString("update AUDIO_PORTS set ")+ QString().sprintf("INPUT_%d_LEVEL=%d,", q->value(2).toInt(),q->value(3).toInt())+ QString().sprintf("INPUT_%d_TYPE=%d,", q->value(2).toInt(),q->value(4).toInt())+ QString().sprintf("INPUT_%d_MODE=%d where ", q->value(2).toInt(),q->value(5).toInt())+ "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\" && "+ QString().sprintf("CARD_NUMBER=%d",q->value(1).toInt()); } delete q; sql=QString("drop table AUDIO_INPUTS"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("select ")+ "STATION_NAME,"+ // 00 "CARD_NUMBER,"+ // 01 "PORT_NUMBER,"+ // 02 "LEVEL "+ // 03 "from AUDIO_OUTPUTS where PORT_NUMBER<8"; q=new RDSqlQuery(sql,false); while(q->next()) { sql=QString("update AUDIO_PORTS set ")+ QString().sprintf("OUTPUT_%d_LEVEL=%d where ", q->value(2).toInt(),q->value(3).toInt())+ "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\" && "+ QString().sprintf("CARD_NUMBER=%d",q->value(1).toInt()); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } } delete q; sql=QString("drop table AUDIO_OUTPUTS"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("select ")+ "STATION_NAME,"+ // 00 "CARD_NUMBER,"+ // 01 "CLOCK_SOURCE "+ // 02 "from AUDIO_CARDS where CARD_NUMBER<8"; q=new RDSqlQuery(sql,false); while(q->next()) { sql=QString("update AUDIO_PORTS set ")+ QString().sprintf("CLOCK_SOURCE=%d where ",q->value(2).toInt())+ "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\" && "+ QString().sprintf("CARD_NUMBER=%d",q->value(1).toInt()); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } } delete q; sql=QString("alter table AUDIO_CARDS drop column CLOCK_SOURCE"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } cur_schema--; } // // Revert 282 // if((cur_schema==282)&&(set_schema=0;i--) { sql=QString("alter table STATIONS add column ")+ QString().sprintf("CARD%d_OUTPUTS int default -1 after ALSA_VERSION",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table STATIONS add column ")+ QString().sprintf("CARD%d_INPUTS int default -1 after ALSA_VERSION",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table STATIONS add column ")+ QString().sprintf("CARD%d_NAME char(64) after ALSA_VERSION",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table STATIONS add column ")+ QString().sprintf("CARD%d_DRIVER int default 0 after ALSA_VERSION",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } } sql=QString("drop table AUDIO_CARDS"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } cur_schema--; } // // Revert 281 // if((cur_schema==281)&&(set_schema=100"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } cur_schema--; } // // Revert 279 // if((cur_schema==279)&&(set_schema=100"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } cur_schema--; } // // Revert 278 // if((cur_schema==278)&&(set_schema=0;i--) { sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("LOG_RML%d char(255) after DESCRIPTION_TEMPLATE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("UDP_STRING%d char(255) after DESCRIPTION_TEMPLATE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("UDP_PORT%d int unsigned after DESCRIPTION_TEMPLATE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("UDP_ADDR%d char(255) after DESCRIPTION_TEMPLATE",i); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("LOG%d_START_MODE int default 0 ",i)+ "after AUDITION_PREROLL"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("LOG%d_NEXT_CART int unsigned default 0 ",i)+ "after AUDITION_PREROLL"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("LOG%d_NOW_CART int unsigned default 0 ",i)+ "after AUDITION_PREROLL"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("LOG%d_LOG_LINE int default -1 ",i)+ "after AUDITION_PREROLL"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("LOG%d_LOG_ID int default -1 ",i)+ "after AUDITION_PREROLL"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("LOG%d_RUNNING enum('N','Y') default 'N' ",i)+ "after AUDITION_PREROLL"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("LOG%d_CURRENT_LOG char(64) ",i)+ "after AUDITION_PREROLL"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("LOG%d_LOG_NAME char(64) ",i)+ "after AUDITION_PREROLL"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table RDAIRPLAY add column ")+ QString().sprintf("LOG%d_AUTO_RESTART enum('N','Y') default 'N' ",i)+ "after AUDITION_PREROLL"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } } sql=QString("select ")+ "STATION_NAME,"+ // 00 "MACHINE,"+ // 01 "START_MODE,"+ // 02 "AUTO_RESTART,"+ // 03 "LOG_NAME,"+ // 04 "CURRENT_LOG,"+ // 05 "RUNNING,"+ // 06 "LOG_ID,"+ // 07 "LOG_LINE,"+ // 08 "NOW_CART,"+ // 09 "NEXT_CART,"+ // 10 "UDP_ADDR,"+ // 11 "UDP_PORT,"+ // 12 "UDP_STRING,"+ // 13 "LOG_RML "+ // 14 "from LOG_MACHINES where "+ "MACHINE<3"; q=new RDSqlQuery(sql,false); while(q->next()) { sql=QString("update RDAIRPLAY set ")+ QString().sprintf("UDP_ADDR%d=\"",q->value(1).toInt())+ RDEscapeString(q->value(11).toString())+"\","+ QString().sprintf("UDP_PORT%d=%u,", q->value(1).toInt(),q->value(12).toUInt())+ QString().sprintf("UDP_STRING%d=\"",q->value(1).toInt())+ RDEscapeString(q->value(13).toString())+"\","+ QString().sprintf("LOG_RML%d=\"",q->value(1).toInt())+ RDEscapeString(q->value(14).toString())+"\","+ QString().sprintf("LOG%d_START_MODE=%d,", q->value(1).toInt(),q->value(2).toInt())+ QString().sprintf("LOG%d_AUTO_RESTART=\"",q->value(1).toInt())+ RDEscapeString(q->value(3).toString())+"\","+ QString().sprintf("LOG%d_LOG_NAME=\"",q->value(1).toInt())+ RDEscapeString(q->value(4).toString())+"\","+ QString().sprintf("LOG%d_CURRENT_LOG=\"",q->value(1).toInt())+ RDEscapeString(q->value(5).toString())+"\","+ QString().sprintf("LOG%d_RUNNING=\"",q->value(1).toInt())+ RDEscapeString(q->value(6).toString())+"\","+ QString().sprintf("LOG%d_LOG_ID=%d,", q->value(1).toInt(),q->value(7).toInt())+ QString().sprintf("LOG%d_LOG_LINE=%d,", q->value(1).toInt(),q->value(8).toInt())+ QString().sprintf("LOG%d_NOW_CART=%d,", q->value(1).toInt(),q->value(9).toInt())+ QString().sprintf("LOG%d_NEXT_CART=%d ", q->value(1).toInt(),q->value(10).toInt())+ "where STATION=\""+RDEscapeString(q->value(0).toString())+"\""; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } } delete q; sql=QString("drop table LOG_MACHINES"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } cur_schema--; } // // Revert 277 // if((cur_schema==277)&&(set_schemanext()) { sql=QString("update SERVICES set ")+ QString().sprintf("CLOCK%d=",q->value(1).toInt()); if(q->value(2).isNull()) { sql+="null "; } else { sql+="\""+RDEscapeString(q->value(2).toString())+"\" "; } sql+="where NAME=\""+RDEscapeString(q->value(0).toString())+"\""; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } } delete q; sql=QString("drop table SERVICE_CLOCKS"); if(!RDSqlQuery::apply(sql,err_msg)) { return false; } cur_schema--; } // // Revert 258 // if((cur_schema==258)&&(set_schemanext()) { tablename=q->value(0).toString(); tablename.replace(" ","_"); sql=QString("alter table ")+ "`"+tablename+"_LOG` "+ "modify column CART_NUMBER int unsigned not null"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } } delete q; cur_schema--; } // // Revert 257 // if((cur_schema==257)&&(set_schemanext()) { tablename=q->value(0).toString(); tablename.replace(" ","_"); sql=QString("alter table `")+tablename+"_SRT` drop column DESCRIPTION"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } sql=QString("alter table `")+tablename+"_SRT` drop column OUTCUE"; if(!RDSqlQuery::apply(sql,err_msg)) { return false; } } delete q; cur_schema--; } // // Revert 254 // if((cur_schema==254)&&(set_schema