From db70aa45503e945e4230c0e5aa318280c994aecd Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Thu, 5 Jul 2018 08:52:38 -0400 Subject: [PATCH] 2018-07-05 Fred Gleason * Added an 'ELR_LINES' table to the database. * Incremented the database version to 289. * Removed the 'RDSvc::serviceTableName()' method. --- ChangeLog | 4 + docs/tables/Makefile.am | 2 +- .../{svc_rec_format.txt => elr_lines.txt} | 7 +- lib/dbversion.h | 2 +- lib/export_bmiemr.cpp | 9 +- lib/export_cutlog.cpp | 37 ++--- lib/export_deltaflex.cpp | 47 +++--- lib/export_musicclassical.cpp | 37 ++--- lib/export_musicplayout.cpp | 45 +++--- lib/export_musicsummary.cpp | 26 ++-- lib/export_nprsoundex.cpp | 23 ++- lib/export_radiotraffic.cpp | 43 +++--- lib/export_soundex.cpp | 14 +- lib/export_spincount.cpp | 18 ++- lib/export_technical.cpp | 54 +++---- lib/export_textlog.cpp | 49 +++--- lib/rdcartslot.cpp | 26 ++-- lib/rdcreate_log.cpp | 4 +- lib/rdcreate_log.h | 2 +- lib/rdlogplay.cpp | 89 +++++------ lib/rdlogplay.h | 3 +- lib/rdreport.cpp | 86 +++++------ lib/rdsound_panel.cpp | 6 +- lib/rdsvc.cpp | 25 +-- lib/rdsvc.h | 1 - rdlogmanager/list_svcs.cpp | 29 ++-- rdlogmanager/svc_rec.cpp | 37 ++--- rdlogmanager/svc_rec.h | 1 - utils/rddbmgr/revertschema.cpp | 143 ++++++++++++++++++ utils/rddbmgr/schemamap.cpp | 2 +- utils/rddbmgr/updateschema.cpp | 138 +++++++++++++++++ utils/rdmaint/rdmaint.cpp | 14 +- 32 files changed, 631 insertions(+), 392 deletions(-) rename docs/tables/{svc_rec_format.txt => elr_lines.txt} (90%) diff --git a/ChangeLog b/ChangeLog index 4ea74df9..ffb9f0cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -17083,3 +17083,7 @@ * Added a 'LOG_LINES' table to the database. * Incremented the database version to 288. * Removed the 'RDLog::tableName()' method. +2018-07-05 Fred Gleason + * Added an 'ELR_LINES' table to the database. + * Incremented the database version to 289. + * Removed the 'RDSvc::serviceTableName()' method. diff --git a/docs/tables/Makefile.am b/docs/tables/Makefile.am index 1c06254d..34fb8f15 100644 --- a/docs/tables/Makefile.am +++ b/docs/tables/Makefile.am @@ -36,6 +36,7 @@ EXTRA_DIST = audio_cards.txt\ dropboxes.txt\ dropbox_paths.txt\ dropbox_sched_codes.txt\ + elr_lines.txt\ encoder_bitrates.txt\ encoder_channels.txt\ encoder_samplerates.txt\ @@ -72,7 +73,6 @@ EXTRA_DIST = audio_cards.txt\ services.txt\ sources.txt\ stations.txt\ - svc_rec_format.txt\ system.txt\ triggers.txt\ ttys.txt\ diff --git a/docs/tables/svc_rec_format.txt b/docs/tables/elr_lines.txt similarity index 90% rename from docs/tables/svc_rec_format.txt rename to docs/tables/elr_lines.txt index 0066c266..ff0e6a43 100644 --- a/docs/tables/svc_rec_format.txt +++ b/docs/tables/elr_lines.txt @@ -1,12 +1,11 @@ - Reconciliation Format Table Layout for Rivendell + ELR_LINES Table Layout for Rivendell -This is the generic layout of all reconciliation tables. Each of -these tables will be have a name ending in '_SRT' and be listed in -the 'SERVICES' table. +The ELR_LINES table hold information for electronic log reconciliation. FIELD NAME TYPE REMARKS ------------------------------------------------------------------------ ID int(10) unsigned Primary key, auto-increment +SERVICE_NAME char(10) From SERVICES.NAME LENGTH int(11) signed LOG_NAME char(64) From LOGS.NAME LOG_ID int(11) signed From *_LOG.ID diff --git a/lib/dbversion.h b/lib/dbversion.h index 7124c01b..e78c4a5c 100644 --- a/lib/dbversion.h +++ b/lib/dbversion.h @@ -24,7 +24,7 @@ /* * Current Database Version */ -#define RD_VERSION_DATABASE 288 +#define RD_VERSION_DATABASE 289 #endif // DBVERSION_H diff --git a/lib/export_bmiemr.cpp b/lib/export_bmiemr.cpp index 244ea839..bdf1e476 100644 --- a/lib/export_bmiemr.cpp +++ b/lib/export_bmiemr.cpp @@ -19,11 +19,12 @@ // #include + +#include #include #include +#include #include -#include - bool RDReport::ExportBmiEmr(const QString &filename,const QDate &startdate, const QDate &enddate,const QString &mixtable) @@ -67,7 +68,9 @@ bool RDReport::ExportBmiEmr(const QString &filename,const QDate &startdate, "LENGTH,"+ // 04 "ISRC,"+ // 05 "USAGE_CODE "+ // 06 - "from `"+mixtable+"_SRT` order by EVENT_DATETIME"; + "from ELR_LINES where "+ + "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ + "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); // diff --git a/lib/export_cutlog.cpp b/lib/export_cutlog.cpp index d636180f..a536243d 100644 --- a/lib/export_cutlog.cpp +++ b/lib/export_cutlog.cpp @@ -22,11 +22,13 @@ #include #include -#include -#include + #include #include #include +#include +#include +#include #include bool RDReport::ExportCutLog(const QString &filename,const QDate &startdate, @@ -52,22 +54,23 @@ bool RDReport::ExportCutLog(const QString &filename,const QDate &startdate, cart_fmt="%6u"; } sql=QString("select ")+ - "`"+mixtable+"_SRT`.LENGTH,"+ // 00 - "`"+mixtable+"_SRT`.CART_NUMBER,"+ // 01 - "`"+mixtable+"_SRT`.EVENT_DATETIME,"+ // 02 - "`"+mixtable+"_SRT`.EVENT_TYPE,"+ // 03 - "`"+mixtable+"_SRT`.EXT_START_TIME,"+ // 04 - "`"+mixtable+"_SRT`.EXT_LENGTH,"+ // 05 - "`"+mixtable+"_SRT`.EXT_DATA,"+ // 06 - "`"+mixtable+"_SRT`.EXT_EVENT_ID,"+ // 07 - "`"+mixtable+"_SRT`.TITLE,"+ // 08 + "ELR_LINES.LENGTH,"+ // 00 + "ELR_LINES.CART_NUMBER,"+ // 01 + "ELR_LINES.EVENT_DATETIME,"+ // 02 + "ELR_LINES.EVENT_TYPE,"+ // 03 + "ELR_LINES.EXT_START_TIME,"+ // 04 + "ELR_LINES.EXT_LENGTH,"+ // 05 + "ELR_LINES.EXT_DATA,"+ // 06 + "ELR_LINES.EXT_EVENT_ID,"+ // 07 + "ELR_LINES.TITLE,"+ // 08 "CART.FORCED_LENGTH,"+ // 09 - "`"+mixtable+"_SRT`.STATION_NAME,"+ // 10 - "`"+mixtable+"_SRT`.PLAY_SOURCE,"+ // 11 - "`"+mixtable+"_SRT`.CUT_NUMBER,"+ // 12 - "`"+mixtable+"_SRT`.DESCRIPTION "+ // 13 - "from `"+mixtable+"_SRT` left join CART "+ - "on `"+mixtable+"_SRT`.CART_NUMBER=CART.NUMBER "+ + "ELR_LINES.STATION_NAME,"+ // 10 + "ELR_LINES.PLAY_SOURCE,"+ // 11 + "ELR_LINES.CUT_NUMBER,"+ // 12 + "ELR_LINES.DESCRIPTION "+ // 13 + "from ELR_LINES left join CART "+ + "on ELR_LINES.CART_NUMBER=CART.NUMBER where "+ + "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); diff --git a/lib/export_deltaflex.cpp b/lib/export_deltaflex.cpp index a81767c3..690b71ff 100644 --- a/lib/export_deltaflex.cpp +++ b/lib/export_deltaflex.cpp @@ -2,7 +2,7 @@ // // Export a Rivendell Report to CBSI DeltaFlex // -// (C) Copyright 2002-2005,2016-2017 Fred Gleason +// (C) Copyright 2002-2005,2016-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 @@ -29,10 +29,11 @@ #include #include -#include -#include -#include +#include +#include +#include +#include bool RDReport::ExportDeltaflex(const QString &filename,const QDate &startdate, const QDate &enddate,const QString &mixtable) @@ -54,28 +55,22 @@ bool RDReport::ExportDeltaflex(const QString &filename,const QDate &startdate, else { air_fmt="%u"; } - sql=QString().sprintf("select `%s_SRT`.LENGTH,`%s_SRT`.CART_NUMBER,\ - `%s_SRT`.EVENT_DATETIME,`%s_SRT`.EVENT_TYPE,\ - `%s_SRT`.EXT_START_TIME,`%s_SRT`.EXT_LENGTH,\ - `%s_SRT`.EXT_DATA,`%s_SRT`.EXT_EVENT_ID,\ - `%s_SRT`.EXT_ANNC_TYPE,`%s_SRT`.TITLE,\ - `%s_SRT`.EXT_CART_NAME from `%s_SRT` \ - left join CART on\ - `%s_SRT`.CART_NUMBER=CART.NUMBER\ - order by EVENT_DATETIME", - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable); + sql=QString("select ")+ + "ELR_LINES.LENGTH,"+ + "ELR_LINES.CART_NUMBER,"+ + "ELR_LINES.EVENT_DATETIME,"+ + "ELR_LINES.EVENT_TYPE,"+ + "ELR_LINES.EXT_START_TIME,"+ + "ELR_LINES.EXT_LENGTH,"+ + "ELR_LINES.EXT_DATA,"+ + "ELR_LINES.EXT_EVENT_ID,"+ + "ELR_LINES.EXT_ANNC_TYPE,"+ + "ELR_LINES.TITLE,"+ + "ELR_LINES.EXT_CART_NAME "+ + "from ELR_LINES left join CART "+ + "on ELR_LINES.CART_NUMBER=CART.NUMBER where "+ + "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ + "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); // diff --git a/lib/export_musicclassical.cpp b/lib/export_musicclassical.cpp index e500449c..9881153a 100644 --- a/lib/export_musicclassical.cpp +++ b/lib/export_musicclassical.cpp @@ -22,11 +22,13 @@ #include #include -#include -#include + #include #include #include +#include +#include +#include #include bool RDReport::ExportMusicClassical(const QString &filename, @@ -52,25 +54,18 @@ bool RDReport::ExportMusicClassical(const QString &filename, else { cart_fmt="%6u"; } - sql=QString().sprintf("select `%s_SRT`.LENGTH,\ - `%s_SRT`.CART_NUMBER,\ - `%s_SRT`.EVENT_DATETIME,\ - `%s_SRT`.TITLE,\ - `%s_SRT`.ALBUM,\ - `%s_SRT`.COMPOSER,\ - `%s_SRT`.USER_DEFINED \ - from `%s_SRT` left join CART on\ - `%s_SRT`.CART_NUMBER=CART.NUMBER\ - order by EVENT_DATETIME", - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable); + sql=QString("select ")+ + "ELR_LINES.LENGTH,"+ + "ELR_LINES.CART_NUMBER,"+ + "ELR_LINES.EVENT_DATETIME,"+ + "ELR_LINES.TITLE,"+ + "ELR_LINES.ALBUM,"+ + "ELR_LINES.COMPOSER,"+ + "ELR_LINES.USER_DEFINED "+ + "from ELR_LINES left join CART "+ + "on ELR_LINES.CART_NUMBER=CART.NUMBER where "+ + "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ + "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); // diff --git a/lib/export_musicplayout.cpp b/lib/export_musicplayout.cpp index 6af931e8..76cdd8f4 100644 --- a/lib/export_musicplayout.cpp +++ b/lib/export_musicplayout.cpp @@ -2,7 +2,7 @@ // // Export a Rivendell Report to an ASCII Text File. // -// (C) Copyright 2012,2016-2017 Fred Gleason +// (C) Copyright 2012,2016-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 @@ -22,11 +22,13 @@ #include #include -#include -#include + #include #include #include +#include +#include +#include #include bool RDReport::ExportMusicPlayout(const QString &filename, @@ -52,29 +54,20 @@ bool RDReport::ExportMusicPlayout(const QString &filename, else { cart_fmt="%6u"; } - sql=QString().sprintf("select `%s_SRT`.LENGTH,\ - `%s_SRT`.CART_NUMBER,\ - `%s_SRT`.EVENT_DATETIME,\ - `%s_SRT`.EXT_EVENT_ID,\ - `%s_SRT`.TITLE,\ - `%s_SRT`.CUT_NUMBER,\ - `%s_SRT`.ARTIST,\ - `%s_SRT`.ALBUM,\ - `%s_SRT`.LABEL \ - from `%s_SRT` left join CART on\ - `%s_SRT`.CART_NUMBER=CART.NUMBER\ - order by EVENT_DATETIME", - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable); + sql=QString("select ")+ + "ELR_LINES.LENGTH,"+ + "ELR_LINES.CART_NUMBER,"+ + "ELR_LINES.EVENT_DATETIME,"+ + "ELR_LINES.EXT_EVENT_ID,"+ + "ELR_LINES.TITLE,"+ + "ELR_LINES.CUT_NUMBER,"+ + "ELR_LINES.ARTIST,"+ + "ELR_LINES.ALBUM,"+ + "ELR_LINES.LABEL "+ + "from ELR_LINES left join CART "+ + "on ELR_LINES.CART_NUMBER=CART.NUMBER where "+ + "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ + "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); // diff --git a/lib/export_musicsummary.cpp b/lib/export_musicsummary.cpp index 8e6dd599..8de24c25 100644 --- a/lib/export_musicsummary.cpp +++ b/lib/export_musicsummary.cpp @@ -2,7 +2,7 @@ // // Export a Rivendell Report to an ASCII Text File. // -// (C) Copyright 2012,2016-2017 Fred Gleason +// (C) Copyright 2012,2016-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 @@ -22,11 +22,13 @@ #include #include -#include -#include + #include #include #include +#include +#include +#include #include @@ -45,16 +47,14 @@ bool RDReport::ExportMusicSummary(const QString &filename, report_error_code=RDReport::ErrorCantOpen; return false; } - sql=QString().sprintf("select `%s_SRT`.ARTIST,`%s_SRT`.TITLE,\ - `%s_SRT`.ALBUM \ - from `%s_SRT` left join CART on\ - `%s_SRT`.CART_NUMBER=CART.NUMBER\ - order by EVENT_DATETIME", - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable); + sql=QString("select ")+ + "ELR_LINES.ARTIST,"+ + "ELR_LINES.TITLE,"+ + "ELR_LINES.ALBUM "+ + "from ELR_LINES left join CART "+ + "on ELR_LINES.CART_NUMBER=CART.NUMBER where "+ + "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ + "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); // diff --git a/lib/export_nprsoundex.cpp b/lib/export_nprsoundex.cpp index cb5e3eb4..eb7acbfe 100644 --- a/lib/export_nprsoundex.cpp +++ b/lib/export_nprsoundex.cpp @@ -2,7 +2,7 @@ // // Export a Rivendell NPR SoundExchange Report to an ASCII Text File. // -// (C) Copyright 2002-2006,2013,2016-2017 Fred Gleason +// (C) Copyright 2002-2006,2013,2016-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 @@ -22,13 +22,14 @@ #include #include -#include -#include + #include #include -#include -#include +#include #include +#include +#include +#include // // This implements a National Public Radio (NPR) standard. @@ -63,8 +64,16 @@ bool RDReport::ExportNprSoundEx(const QString &filename,const QDate &startdate, // // Roll Up Records // - sql=QString("select EVENT_DATETIME,LENGTH,TITLE,ARTIST,ALBUM,LABEL from `")+ - mixtable+"_SRT` order by EVENT_DATETIME"; + sql=QString("select ")+ + "EVENT_DATETIME,"+ + "LENGTH,"+ + "TITLE,"+ + "ARTIST,"+ + "ALBUM,"+ + "LABEL "+ + "from ELR_LINES where "+ + "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ + "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); while(q->next()) { fprintf(f,"%s\t",(const char *)q->value(0).toDateTime(). diff --git a/lib/export_radiotraffic.cpp b/lib/export_radiotraffic.cpp index 5fcca1b8..bd6c68ed 100644 --- a/lib/export_radiotraffic.cpp +++ b/lib/export_radiotraffic.cpp @@ -2,7 +2,7 @@ // // Export a Rivendell Report to RadioTraffic.com // -// (C) Copyright 2002-2005,2009,2016-2017 Fred Gleason +// (C) Copyright 2002-2005,2009,2016-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 @@ -26,9 +26,9 @@ #include #include #include +#include #include - bool RDReport::ExportRadioTraffic(const QString &filename, const QDate &startdate,const QDate &enddate, const QString &mixtable) @@ -50,29 +50,22 @@ bool RDReport::ExportRadioTraffic(const QString &filename, else { air_fmt=QString().sprintf("%%%-uu ",cartDigits()); } - sql=QString().sprintf("select `%s_SRT`.LENGTH,`%s_SRT`.CART_NUMBER,\ - `%s_SRT`.EVENT_DATETIME,`%s_SRT`.EVENT_TYPE,\ - `%s_SRT`.EXT_START_TIME,`%s_SRT`.EXT_LENGTH,\ - `%s_SRT`.EXT_DATA,`%s_SRT`.EXT_EVENT_ID,\ - `%s_SRT`.EXT_ANNC_TYPE,`%s_SRT`.TITLE,\ - `%s_SRT`.EXT_CART_NAME from `%s_SRT` \ - left join CART on\ - `%s_SRT`.CART_NUMBER=CART.NUMBER\ - order by EVENT_DATETIME", - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable); - + sql=QString("select ")+ + "ELR_LINES.LENGTH,"+ + "ELR_LINES.CART_NUMBER,"+ + "ELR_LINES.EVENT_DATETIME,"+ + "ELR_LINES.EVENT_TYPE,"+ + "ELR_LINES.EXT_START_TIME,"+ + "ELR_LINES.EXT_LENGTH,"+ + "ELR_LINES.EXT_DATA,"+ + "ELR_LINES.EXT_EVENT_ID,"+ + "ELR_LINES.EXT_ANNC_TYPE,"+ + "ELR_LINES.TITLE,"+ + "ELR_LINES.EXT_CART_NAME "+ + "from ELR_LINES left join CART "+ + "on ELR_LINES.CART_NUMBER=CART.NUMBER where "+ + "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ + "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); // diff --git a/lib/export_soundex.cpp b/lib/export_soundex.cpp index 63e78b6d..660f4286 100644 --- a/lib/export_soundex.cpp +++ b/lib/export_soundex.cpp @@ -2,7 +2,7 @@ // // Export a Rivendell SoundExchange Report to an ASCII Text File. // -// (C) Copyright 2002-2006,2016-2017 Fred Gleason +// (C) Copyright 2002-2006,2016-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 @@ -22,12 +22,14 @@ #include #include -#include -#include + #include #include -#include +#include +#include #include +#include +#include bool RDReport::ExportSoundEx(const QString &filename,const QDate &startdate, const QDate &enddate,const QString &mixtable) @@ -76,7 +78,9 @@ bool RDReport::ExportSoundEx(const QString &filename,const QDate &startdate, "ISRC,"+ // 03 "ALBUM,"+ // 04 "LABEL "+ // 05 - "from `"+mixtable+"_SRT` order by CART_NUMBER"; + "from ELR_LINES where "+ + "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ + "order by CART_NUMBER"; q=new RDSqlQuery(sql); while(q->next()) { if(q->value(0).toUInt()==cartnum) { diff --git a/lib/export_spincount.cpp b/lib/export_spincount.cpp index c396175f..b35424ef 100644 --- a/lib/export_spincount.cpp +++ b/lib/export_spincount.cpp @@ -2,7 +2,7 @@ // // Export a Rivendell Spin Count Report to an ASCII Text File. // -// (C) Copyright 2015,2017 Fred Gleason +// (C) Copyright 2015,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 @@ -24,11 +24,13 @@ #include #include -#include -#include + #include #include #include +#include +#include +#include #include bool RDReport::ExportSpinCount(const QString &filename,const QDate &startdate, @@ -62,8 +64,14 @@ bool RDReport::ExportSpinCount(const QString &filename,const QDate &startdate, // // Generate Spin Counts // - sql=QString("select CART_NUMBER,TITLE,ARTIST,ALBUM,LABEL ")+ - "from `"+mixtable+"_SRT` order by TITLE"; + sql=QString("select ")+ + "CART_NUMBER,"+ + "TITLE,"+ + "ARTIST,"+ + "ALBUM,LABEL "+ + "from ELR_LINES where "+ + "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ + "order by TITLE"; q=new RDSqlQuery(sql); while(q->next()) { carts[q->value(0).toInt()]++; diff --git a/lib/export_technical.cpp b/lib/export_technical.cpp index c1ac4a24..f5322d7c 100644 --- a/lib/export_technical.cpp +++ b/lib/export_technical.cpp @@ -2,7 +2,7 @@ // // Export a Rivendell Technical Report to an ASCII Text File. // -// (C) Copyright 2002-2006,2016-2017 Fred Gleason +// (C) Copyright 2002-2006,2016-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 @@ -22,11 +22,13 @@ #include #include -#include -#include + #include #include #include +#include +#include +#include #include bool RDReport::ExportTechnical(const QString &filename,const QDate &startdate, @@ -57,32 +59,26 @@ bool RDReport::ExportTechnical(const QString &filename,const QDate &startdate, else { cart_fmt="%6u"; } - sql=QString().sprintf("select `%s_SRT`.LENGTH,`%s_SRT`.CART_NUMBER,\ - `%s_SRT`.EVENT_DATETIME,`%s_SRT`.EVENT_TYPE,\ - `%s_SRT`.EXT_START_TIME,`%s_SRT`.EXT_LENGTH,\ - `%s_SRT`.EXT_DATA,`%s_SRT`.EXT_EVENT_ID,\ - `%s_SRT`.TITLE,CART.FORCED_LENGTH,\ - `%s_SRT`.STATION_NAME,`%s_SRT`.PLAY_SOURCE,\ - `%s_SRT`.CUT_NUMBER,`%s_SRT`.START_SOURCE,\ - `%s_SRT`.ONAIR_FLAG from `%s_SRT` left join CART on\ - `%s_SRT`.CART_NUMBER=CART.NUMBER\ - order by EVENT_DATETIME", - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable); + sql=QString("select ")+ + "ELR_LINES.LENGTH,"+ + "ELR_LINES.CART_NUMBER,"+ + "ELR_LINES.EVENT_DATETIME,"+ + "ELR_LINES.EVENT_TYPE,"+ + "ELR_LINES.EXT_START_TIME,"+ + "ELR_LINES.EXT_LENGTH,"+ + "ELR_LINES.EXT_DATA,"+ + "ELR_LINES.EXT_EVENT_ID,"+ + "ELR_LINES.TITLE,"+ + "CART.FORCED_LENGTH,"+ + "ELR_LINES.STATION_NAME,"+ + "ELR_LINES.PLAY_SOURCE,"+ + "ELR_LINES.CUT_NUMBER,"+ + "ELR_LINES.START_SOURCE,"+ + "ELR_LINES.ONAIR_FLAG "+ + "from ELR_LINES left join CART "+ + "on ELR_LINES.CART_NUMBER=CART.NUMBER where "+ + "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ + "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); // diff --git a/lib/export_textlog.cpp b/lib/export_textlog.cpp index 29f53381..22bfd27b 100644 --- a/lib/export_textlog.cpp +++ b/lib/export_textlog.cpp @@ -2,7 +2,7 @@ // // Export a Rivendell Report to an ASCII Text File. // -// (C) Copyright 2002-2005,2016-2017 Fred Gleason +// (C) Copyright 2002-2005,2016-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 @@ -22,11 +22,13 @@ #include #include -#include -#include + #include #include #include +#include +#include +#include #include bool RDReport::ExportTextLog(const QString &filename,const QDate &startdate, @@ -51,29 +53,24 @@ bool RDReport::ExportTextLog(const QString &filename,const QDate &startdate, else { cart_fmt="%6u"; } - sql=QString().sprintf("select `%s_SRT`.LENGTH,`%s_SRT`.CART_NUMBER,\ - `%s_SRT`.EVENT_DATETIME,`%s_SRT`.EVENT_TYPE,\ - `%s_SRT`.EXT_START_TIME,`%s_SRT`.EXT_LENGTH,\ - `%s_SRT`.EXT_DATA,`%s_SRT`.EXT_EVENT_ID,\ - `%s_SRT`.TITLE,CART.FORCED_LENGTH,\ - `%s_SRT`.STATION_NAME,`%s_SRT`.PLAY_SOURCE,\ - `%s_SRT`.CUT_NUMBER from `%s_SRT` left join CART on\ - `%s_SRT`.CART_NUMBER=CART.NUMBER\ - order by EVENT_DATETIME", - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable, - (const char *)mixtable); + sql=QString("select ")+ + "ELR_LINES.LENGTH,"+ + "ELR_LINES.CART_NUMBER,"+ + "ELR_LINES.EVENT_DATETIME,"+ + "ELR_LINES.EVENT_TYPE,"+ + "ELR_LINES.EXT_START_TIME,"+ + "ELR_LINES.EXT_LENGTH,"+ + "ELR_LINES.EXT_DATA,"+ + "ELR_LINES.EXT_EVENT_ID,"+ + "ELR_LINES.TITLE,"+ + "CART.FORCED_LENGTH,"+ + "ELR_LINES.STATION_NAME,"+ + "ELR_LINES.PLAY_SOURCE,"+ + "ELR_LINES.CUT_NUMBER "+ + "from ELR_LINES left join CART "+ + "on ELR_LINES.CART_NUMBER=CART.NUMBER where "+ + "SERVICE_NAME=\""+RDEscapeString(mixtable)+"\" "+ + "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); // diff --git a/lib/rdcartslot.cpp b/lib/rdcartslot.cpp index fbadfc19..2768598d 100644 --- a/lib/rdcartslot.cpp +++ b/lib/rdcartslot.cpp @@ -679,20 +679,18 @@ void RDCartSlot::LogPlayout(RDPlayDeck::State state) slot_logline->startTime(RDLogLine::Actual)); QString svctablename=slot_svcname; svctablename.replace(" ","_"); - sql=QString("insert into `")+svctablename+"_SRT` set "+ - QString().sprintf("LENGTH=%d,LOG_ID=%d,CART_NUMBER=%u,EVENT_TYPE=%d,\ - EVENT_SOURCE=%d,EXT_LENGTH=%d,PLAY_SOURCE=%d, \ - CUT_NUMBER=%d,USAGE_CODE=%d,START_SOURCE=%d,", - length, - slot_number+1, - slot_logline->cartNumber(), - action, - slot_logline->source(), - slot_logline->extLength(), - RDLogLine::CartSlot, - slot_logline->cutNumber(), - slot_logline->usageCode(), - slot_logline->startSource())+ + sql=QString("insert into ELR_LINES set ")+ + "SERVICE_NAME=\""+RDEscapeString(slot_svcname)+"\","+ + QString().sprintf("LENGTH=%d,",length)+ + QString().sprintf("LOG_ID=%d,",slot_number+1)+ + QString().sprintf("CART_NUMBER=%u,",slot_logline->cartNumber())+ + QString().sprintf("EVENT_TYPE=%d,",action)+ + QString().sprintf("EVENT_SOURCE=%d,",slot_logline->source())+ + QString().sprintf("EXT_LENGTH=%d,",slot_logline->extLength())+ + QString().sprintf("PLAY_SOURCE=%d,",RDLogLine::CartSlot)+ + QString().sprintf("CUT_NUMBER=%d,",slot_logline->cutNumber())+ + QString().sprintf("USAGE_CODE=%d,",slot_logline->usageCode())+ + QString().sprintf("START_SOURCE=%d,",slot_logline->startSource())+ "STATION_NAME=\""+RDEscapeString(slot_station->name())+"\","+ "EVENT_DATETIME="+RDCheckDateTime(eventDateTime,"yyyy-MM-dd hh:mm:ss")+ ","+ diff --git a/lib/rdcreate_log.cpp b/lib/rdcreate_log.cpp index cab54110..804f7060 100644 --- a/lib/rdcreate_log.cpp +++ b/lib/rdcreate_log.cpp @@ -94,7 +94,7 @@ QString RDCreateClockTableSql(QString name,RDConfig *config) config->createTablePostfix(); } - +/* QString RDCreateReconciliationTableSql(QString name,RDConfig *config) { QString sql=QString("create table `")+name+"` ("+ @@ -137,7 +137,7 @@ QString RDCreateReconciliationTableSql(QString name,RDConfig *config) return sql; } - +*/ QString RDCreateStackTableSql(QString name,RDConfig *config) { diff --git a/lib/rdcreate_log.h b/lib/rdcreate_log.h index d530f2c1..b084804e 100644 --- a/lib/rdcreate_log.h +++ b/lib/rdcreate_log.h @@ -26,7 +26,7 @@ //void RDCreateLogTable(const QString &name,RDConfig *config); QString RDCreateLogTableSql(QString name,RDConfig *config); QString RDCreateClockTableSql(QString name,RDConfig *config); -QString RDCreateReconciliationTableSql(QString name,RDConfig *config); +//QString RDCreateReconciliationTableSql(QString name,RDConfig *config); QString RDCreateStackTableSql(QString name,RDConfig *config); #endif diff --git a/lib/rdlogplay.cpp b/lib/rdlogplay.cpp index e3b9c00f..82602f63 100644 --- a/lib/rdlogplay.cpp +++ b/lib/rdlogplay.cpp @@ -553,7 +553,7 @@ void RDLogPlay::load() } } RefreshEvents(0,size()); - RDLog *log=new RDLog(logName().left(logName().length()-4)); + RDLog *log=new RDLog(logName()); play_svc_name=log->service(); delete log; play_line_counter=0; @@ -573,7 +573,7 @@ void RDLogPlay::load() if(play_log!=NULL) { delete play_log; } - play_log=new RDLog(logName().left(logName().length()-4)); + play_log=new RDLog(logName()); play_link_datetime=play_log->linkDatetime(); play_modified_datetime=play_log->modifiedDatetime(); if(play_refreshable) { @@ -776,7 +776,7 @@ void RDLogPlay::save(int line) if(play_log!=NULL) { delete play_log; } - play_log=new RDLog(logName().left(logName().length()-4)); + play_log=new RDLog(logName()); QDateTime current_datetime= QDateTime(QDate::currentDate(),QTime::currentTime()); play_log->setModifiedDatetime(current_datetime); @@ -1562,9 +1562,8 @@ void RDLogPlay::segueEndData(int id) ((RDPlayDeck *)logline->playDeck())->stop(); CleanupEvent(id); UpdateStartTimes(line); - LogTraffic(serviceName(),logName().left(logName().length()-4),logline, - (RDLogLine::PlaySource)(play_id+1), - RDAirPlayConf::TrafficFinish,play_onair_flag); + LogTraffic(logline,(RDLogLine::PlaySource)(play_id+1), + RDAirPlayConf::TrafficFinish,play_onair_flag); emit stopped(line); emit transportChanged(); } @@ -1637,9 +1636,8 @@ void RDLogPlay::macroFinishedData() RDLogLine *logline; if((logline=logLine(line))!=NULL) { logline->setStatus(RDLogLine::Finished); - LogTraffic(serviceName(),logName().left(logName().length()-4),logline, - (RDLogLine::PlaySource)(play_id+1),RDAirPlayConf::TrafficMacro, - play_onair_flag); + LogTraffic(logline,(RDLogLine::PlaySource)(play_id+1), + RDAirPlayConf::TrafficMacro,play_onair_flag); } play_macro_running=false; UpdatePostPoint(); @@ -1661,9 +1659,8 @@ void RDLogPlay::macroStoppedData() RDLogLine *logline; if((logline=logLine(line))!=NULL) { logline->setStatus(RDLogLine::Finished); - LogTraffic(serviceName(),logName().left(logName().length()-4),logline, - (RDLogLine::PlaySource)(play_id+1),RDAirPlayConf::TrafficMacro, - play_onair_flag); + LogTraffic(logline,(RDLogLine::PlaySource)(play_id+1), + RDAirPlayConf::TrafficMacro,play_onair_flag); } UpdatePostPoint(); emit transportChanged(); @@ -1991,9 +1988,8 @@ bool RDLogPlay::StartEvent(int line,RDLogLine::TransType trans_type, emit played(line); logline->setStartTime(RDLogLine::Actual,QTime::currentTime()); logline->setStatus(RDLogLine::Finished); - LogTraffic(serviceName(),logName().left(logName().length()-4), - logline,(RDLogLine::PlaySource)(play_id+1), - RDAirPlayConf::TrafficMacro,play_onair_flag); + LogTraffic(logline,(RDLogLine::PlaySource)(play_id+1), + RDAirPlayConf::TrafficMacro,play_onair_flag); FinishEvent(line); emit transportChanged(); rda->config()->log("log engine",RDConfig::LogInfo,QString(). @@ -2742,9 +2738,8 @@ void RDLogPlay::Paused(int id) UpdateStartTimes(line); emit paused(line); UpdatePostPoint(); - LogTraffic(serviceName(),logName().left(logName().length()-4),logLine(line), - (RDLogLine::PlaySource)(play_id+1),RDAirPlayConf::TrafficPause, - play_onair_flag); + LogTraffic(logLine(line),(RDLogLine::PlaySource)(play_id+1), + RDAirPlayConf::TrafficPause,play_onair_flag); emit transportChanged(); } @@ -2766,9 +2761,8 @@ void RDLogPlay::Stopped(int id) if(runningEvents(lines)==0) { next_channel=0; } - LogTraffic(serviceName(),logName().left(logName().length()-4),logLine(line), - (RDLogLine::PlaySource)(play_id+1),RDAirPlayConf::TrafficStop, - play_onair_flag); + LogTraffic(logLine(line),(RDLogLine::PlaySource)(play_id+1), + RDAirPlayConf::TrafficStop,play_onair_flag); emit transportChanged(); } @@ -2797,9 +2791,8 @@ void RDLogPlay::Finished(int id) if(runningEvents(lines)==0) { next_channel=0; } - LogTraffic(serviceName(),logName().left(logName().length()-4),logline, - (RDLogLine::PlaySource)(play_id+1),RDAirPlayConf::TrafficFinish, - play_onair_flag); + LogTraffic(logline,(RDLogLine::PlaySource)(play_id+1), + RDAirPlayConf::TrafficFinish,play_onair_flag); emit transportChanged(); } @@ -2954,8 +2947,7 @@ void RDLogPlay::SendNowNext() } for(unsigned i=0;isize();i++) { play_rlm_hosts->at(i)-> - sendEvent(svcname,logName().left(logName().length()-4),play_id,logline, - play_onair_flag,play_op_mode); + sendEvent(svcname,logName(),play_id,logline,play_onair_flag,play_op_mode); } RDResolveNowNext(&cmd,logline,0); play_nownext_socket-> @@ -2977,13 +2969,11 @@ void RDLogPlay::SendNowNext() } -void RDLogPlay::LogTraffic(const QString &svcname,const QString &logname, - RDLogLine *logline,RDLogLine::PlaySource src, +void RDLogPlay::LogTraffic(RDLogLine *logline,RDLogLine::PlaySource src, RDAirPlayConf::TrafficAction action,bool onair_flag) const { QString sql; - RDSqlQuery *q; QDateTime datetime=QDateTime(QDate::currentDate(),QTime::currentTime()); int length=logline->startTime(RDLogLine::Actual).msecsTo(datetime.time()); if(length<0) { // Event crossed midnight! @@ -2991,7 +2981,7 @@ void RDLogPlay::LogTraffic(const QString &svcname,const QString &logname, datetime.setDate(datetime.date().addDays(-1)); } - if((logline==NULL)||(svcname.isEmpty())) { + if((logline==NULL)||(serviceName().isEmpty())) { return; } @@ -3001,12 +2991,13 @@ void RDLogPlay::LogTraffic(const QString &svcname,const QString &logname, eventDateTimeSQL = RDCheckDateTime(QDateTime(datetime.date(), logline->startTime(RDLogLine::Actual)), "yyyy-MM-dd hh:mm:ss"); - sql=QString("insert into `")+RDSvc::svcTableName(svcname)+"` set "+ + sql=QString("insert into ELR_LINES set ")+ + "SERVICE_NAME=\""+RDEscapeString(serviceName())+"\","+ QString().sprintf("LENGTH=%d,",length)+ - "LOG_NAME=\""+RDEscapeString(logname.utf8())+"\","+ + "LOG_NAME=\""+RDEscapeString(logName())+"\","+ QString().sprintf("LOG_ID=%d,",logline->id())+ QString().sprintf("CART_NUMBER=%u,",logline->cartNumber())+ - "STATION_NAME=\""+RDEscapeString(rda->station()->name().utf8())+"\","+ + "STATION_NAME=\""+RDEscapeString(rda->station()->name())+"\","+ "EVENT_DATETIME="+eventDateTimeSQL+","+ QString().sprintf("EVENT_TYPE=%d,",action)+ QString().sprintf("EVENT_SOURCE=%d,",logline->source())+ @@ -3017,26 +3008,24 @@ void RDLogPlay::LogTraffic(const QString &svcname,const QString &logname, "EXT_ANNC_TYPE=\""+RDEscapeString(logline->extAnncType())+"\","+ QString().sprintf("PLAY_SOURCE=%d,",src)+ QString().sprintf("CUT_NUMBER=%d,",logline->cutNumber())+ - "EXT_CART_NAME=\""+RDEscapeString(logline->extCartName().utf8())+"\","+ - "TITLE=\""+RDEscapeString(logline->title().utf8())+"\","+ - "ARTIST=\""+RDEscapeString(logline->artist().utf8())+"\","+ + "EXT_CART_NAME=\""+RDEscapeString(logline->extCartName())+"\","+ + "TITLE=\""+RDEscapeString(logline->title())+"\","+ + "ARTIST=\""+RDEscapeString(logline->artist())+"\","+ "SCHEDULED_TIME="+RDCheckDateTime(logline->startTime(RDLogLine::Logged), "hh:mm:ss")+","+ - "ISRC=\""+RDEscapeString(logline->isrc().utf8())+"\","+ - "PUBLISHER=\""+RDEscapeString(logline->publisher().utf8())+"\","+ - "COMPOSER=\""+RDEscapeString(logline->composer().utf8())+"\","+ + "ISRC=\""+RDEscapeString(logline->isrc())+"\","+ + "PUBLISHER=\""+RDEscapeString(logline->publisher())+"\","+ + "COMPOSER=\""+RDEscapeString(logline->composer())+"\","+ QString().sprintf("USAGE_CODE=%d,",logline->usageCode())+ QString().sprintf("START_SOURCE=%d,",logline->startSource())+ "ONAIR_FLAG=\""+RDYesNo(onair_flag)+"\","+ - "ALBUM=\""+RDEscapeString(logline->album().utf8())+"\","+ - "LABEL=\""+RDEscapeString(logline->label().utf8())+"\","+ - "USER_DEFINED=\""+RDEscapeString(logline->userDefined().utf8())+"\","+ - "CONDUCTOR=\""+RDEscapeString(logline->conductor().utf8())+"\","+ - "SONG_ID=\""+RDEscapeString(logline->songId().utf8())+"\","+ - "DESCRIPTION=\""+RDEscapeString(logline->description().utf8())+"\","+ - "OUTCUE=\""+RDEscapeString(logline->outcue().utf8())+"\","+ - "ISCI=\""+RDEscapeString(logline->isci().utf8())+"\""; - - q=new RDSqlQuery(sql); - delete q; + "ALBUM=\""+RDEscapeString(logline->album())+"\","+ + "LABEL=\""+RDEscapeString(logline->label())+"\","+ + "USER_DEFINED=\""+RDEscapeString(logline->userDefined())+"\","+ + "CONDUCTOR=\""+RDEscapeString(logline->conductor())+"\","+ + "SONG_ID=\""+RDEscapeString(logline->songId())+"\","+ + "DESCRIPTION=\""+RDEscapeString(logline->description())+"\","+ + "OUTCUE=\""+RDEscapeString(logline->outcue())+"\","+ + "ISCI=\""+RDEscapeString(logline->isci())+"\""; + RDSqlQuery::apply(sql); } diff --git a/lib/rdlogplay.h b/lib/rdlogplay.h index ea6b6ff4..cc000bf7 100644 --- a/lib/rdlogplay.h +++ b/lib/rdlogplay.h @@ -188,8 +188,7 @@ class RDLogPlay : public QObject,public RDLogEvent RDLogLine::TransType GetTransType(const QString &logname,int line); bool ClearBlock(int start_line); void SendNowNext(); - void LogTraffic(const QString &svcname,const QString &logname, - RDLogLine *logline,RDLogLine::PlaySource src, + void LogTraffic(RDLogLine *logline,RDLogLine::PlaySource src, RDAirPlayConf::TrafficAction action,bool onair_flag) const; RDCae *play_cae; RDAirPlayConf::OpMode play_op_mode; diff --git a/lib/rdreport.cpp b/lib/rdreport.cpp index c434473a..7b726ae3 100644 --- a/lib/rdreport.cpp +++ b/lib/rdreport.cpp @@ -331,7 +331,7 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, RDSqlQuery *q1; RDSqlQuery *q2; RDSvc *svc; - QString rec_name; + // QString rec_name; QString daypart_sql; QString station_sql; QString group_sql; @@ -431,29 +431,19 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, } // - // Generate Mixdown Table + // Generate Mixdown ID // - // Create Table - // - QString mixname="MIXDOWN"+station->name(); - rda->dropTable(mixname+"_SRT"); - sql=RDCreateReconciliationTableSql(mixname+"_SRT",report_config); - q=new RDSqlQuery(sql); - delete q; + QString mixname=QString().sprintf("MIX-%d",getpid()); // // Iterate Selected Services // - sql=QString().sprintf("select SERVICE_NAME from REPORT_SERVICES \ - where REPORT_NAME=\"%s\"", - (const char *)name()); + sql=QString("select SERVICE_NAME from REPORT_SERVICES where ")+ + "REPORT_NAME=\""+RDEscapeString(name())+"\""; q=new RDSqlQuery(sql); while(q->next()) { svc=new RDSvc(q->value(0).toString(),report_station,report_config); if(svc->exists()) { - rec_name=q->value(0).toString(); - rec_name.replace(" ","_"); - // // Generate Type Filters // @@ -461,14 +451,12 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, if(!exportTypeEnabled(RDReport::Generic)) { if(exportTypeForced(RDReport::Traffic)|| exportTypeEnabled(RDReport::Traffic)) { - force_sql+=QString().sprintf("(`%s_SRT`.EVENT_SOURCE=%d)||", - (const char *)rec_name, + force_sql+=QString().sprintf("(ELR_LINES.EVENT_SOURCE=%d)||", RDLogLine::Traffic); } if(exportTypeForced(RDReport::Music)|| exportTypeEnabled(RDReport::Music)) { - force_sql+=QString().sprintf("(`%s_SRT`.EVENT_SOURCE=%d)||", - (const char *)rec_name, + force_sql+=QString().sprintf("(ELR_LINES.EVENT_SOURCE=%d)||", RDLogLine::Music); } force_sql=force_sql.left(force_sql.length()-2); @@ -491,28 +479,29 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, "EXT_ANNC_TYPE,"+ // 10 "PLAY_SOURCE,"+ // 11 "CUT_NUMBER,"+ // 12 - "EVENT_SOURCE,"+ // 13 - "EXT_CART_NAME,"+ // 14 - "LOG_NAME,"+ // 15 - "`"+rec_name+"_SRT`.TITLE,"+ // 16 - "`"+rec_name+"_SRT`.ARTIST,"+ // 17 - "SCHEDULED_TIME,"+ // 18 - "START_SOURCE,"+ // 19 - "`"+rec_name+"_SRT`.PUBLISHER,"+ // 20 - "`"+rec_name+"_SRT`.COMPOSER,"+ // 21 - "`"+rec_name+"_SRT`.ALBUM,"+ // 22 - "`"+rec_name+"_SRT`.LABEL,"+ // 23 - "`"+rec_name+"_SRT`.ISRC,"+ // 24 - "`"+rec_name+"_SRT`.USAGE_CODE,"+ // 25 - "`"+rec_name+"_SRT`.ONAIR_FLAG,"+ // 26 - "`"+rec_name+"_SRT`.ISCI,"+ // 27 - "`"+rec_name+"_SRT`.CONDUCTOR,"+ // 28 - "`"+rec_name+"_SRT`.USER_DEFINED,"+ // 29 - "`"+rec_name+"_SRT`.SONG_ID,"+ // 30 - "`"+rec_name+"_SRT`.DESCRIPTION,"+ // 31 - "`"+rec_name+"_SRT`.OUTCUE "+ // 32 - "from `"+rec_name+"_SRT` left join CART "+ - "on `"+rec_name+"_SRT`.CART_NUMBER=CART.NUMBER where "; + "EVENT_SOURCE,"+ // 13 + "EXT_CART_NAME,"+ // 14 + "LOG_NAME,"+ // 15 + "ELR_LINES.TITLE,"+ // 16 + "ELR_LINES.ARTIST,"+ // 17 + "SCHEDULED_TIME,"+ // 18 + "START_SOURCE,"+ // 19 + "ELR_LINES.PUBLISHER,"+ // 20 + "ELR_LINES.COMPOSER,"+ // 21 + "ELR_LINES.ALBUM,"+ // 22 + "ELR_LINES.LABEL,"+ // 23 + "ELR_LINES.ISRC,"+ // 24 + "ELR_LINES.USAGE_CODE,"+ // 25 + "ELR_LINES.ONAIR_FLAG,"+ // 26 + "ELR_LINES.ISCI,"+ // 27 + "ELR_LINES.CONDUCTOR,"+ // 28 + "ELR_LINES.USER_DEFINED,"+ // 29 + "ELR_LINES.SONG_ID,"+ // 30 + "ELR_LINES.DESCRIPTION,"+ // 31 + "ELR_LINES.OUTCUE "+ // 32 + "from ELR_LINES left join CART "+ + "on ELR_LINES.CART_NUMBER=CART.NUMBER where "+ + "SERVICE_NAME=\""+RDEscapeString(q->value(0).toString())+"\" && "; // // OnAir Flag Filter @@ -552,11 +541,12 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, sql+=")"; q1=new RDSqlQuery(sql); while(q1->next()) { - sql=QString("insert into `")+mixname+"_SRT` "+ - "set "+QString().sprintf("LENGTH=%d,LOG_ID=%u,CART_NUMBER=%u,", - q1->value(0).toInt(), - q1->value(1).toUInt(), - q1->value(2).toInt())+ + sql=QString("insert into ELR_LINES set ")+ + "SERVICE_NAME=\""+RDEscapeString(mixname)+"\","+ + QString().sprintf("LENGTH=%d,LOG_ID=%u,CART_NUMBER=%u,", + q1->value(0).toInt(), + q1->value(1).toUInt(), + q1->value(2).toInt())+ "STATION_NAME=\""+RDEscapeString(q1->value(3).toString())+"\","+ "EVENT_DATETIME="+RDCheckDateTime(q1->value(4).toDateTime(), "yyyy-MM-dd hh:mm:ss")+","+ @@ -692,7 +682,9 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate, #endif system(post_cmd); // printf("MIXDOWN TABLE: %s_SRT\n",(const char *)mixname); - rda->dropTable(mixname+"_SRT"); + sql=QString("delete from ELR_LINES where ")+ + "SERVICE_NAME=\""+RDEscapeString(mixname)+"\""; + RDSqlQuery::apply(sql); return ret; } diff --git a/lib/rdsound_panel.cpp b/lib/rdsound_panel.cpp index b48aa351..13ac6d81 100644 --- a/lib/rdsound_panel.cpp +++ b/lib/rdsound_panel.cpp @@ -1488,7 +1488,8 @@ void RDSoundPanel::LogTraffic(RDPanelButton *button) eventDateTimeSQL = RDCheckDateTime(QDateTime(datetime.date(), button->startTime()), "yyyy-MM-dd hh:mm:ss"); - sql=QString("insert into `")+panel_svcname+"_SRT` set "+ + sql=QString("insert into ELR_LINES set ")+ + "SERVICE_NAME=\""+RDEscapeString(panel_svcname)+"\","+ QString().sprintf("LENGTH=%d,",button->startTime(). msecsTo(datetime.time()))+ QString().sprintf("CART_NUMBER=%u,",button->cart())+ @@ -1532,7 +1533,8 @@ void RDSoundPanel::LogTrafficMacro(RDPanelButton *button) QString().sprintf("NUMBER=%u",button->cart()); q=new RDSqlQuery(sql); if(q->first()) { - sql=QString("insert into `")+panel_svcname+"_SRT` set "+ + sql=QString("insert into ELR_LINES set ")+ + "SERVICE_NAME=\""+RDEscapeString(panel_svcname)+"\","+ QString().sprintf("LENGTH=%d,",q->value(5).toUInt())+ QString().sprintf("CART_NUMBER=%u,",button->cart())+ "STATION_NAME=\""+RDEscapeString(rda->station()->name().utf8())+"\","+ diff --git a/lib/rdsvc.cpp b/lib/rdsvc.cpp index 6ff29efa..6ac15990 100644 --- a/lib/rdsvc.cpp +++ b/lib/rdsvc.cpp @@ -1384,13 +1384,6 @@ bool RDSvc::create(const QString &name,QString *err_msg, delete q; } - // - // Create Service Reconciliation Table - // - sql=RDCreateReconciliationTableSql(RDSvc::svcTableName(name),config); - q=new RDSqlQuery(sql); - delete q; - return true; } @@ -1462,23 +1455,15 @@ void RDSvc::remove(const QString &name) QString tablename=name; tablename.replace(" ","_"); - - rda->dropTable(tablename+"_SRT"); rda->dropTable(tablename+"_STACK"); + sql=QString("delete from ELR_LINES where ")+ + "SERVICE_NAME=\""+RDEscapeString(name)+"\""; + RDSqlQuery::apply(sql); + sql=QString("delete from LOGS where ")+ "SERVICE=\""+RDEscapeString(name)+"\""; - q=new RDSqlQuery(sql); - delete q; -} - - -QString RDSvc::svcTableName(const QString &svc_name) -{ - QString ret=svc_name; - ret.replace(" ","_"); - - return ret+"_SRT"; + RDSqlQuery::apply(sql); } diff --git a/lib/rdsvc.h b/lib/rdsvc.h index 979f0200..140a337a 100644 --- a/lib/rdsvc.h +++ b/lib/rdsvc.h @@ -105,7 +105,6 @@ class RDSvc : public QObject static void remove(const QString &name); static bool exists(const QString &name); static QString timeString(int hour,int secs); - static QString svcTableName(const QString &svc_name); signals: void generationProgress(int step); diff --git a/rdlogmanager/list_svcs.cpp b/rdlogmanager/list_svcs.cpp index 9edd839a..f1b32f77 100644 --- a/rdlogmanager/list_svcs.cpp +++ b/rdlogmanager/list_svcs.cpp @@ -2,7 +2,7 @@ // // List Rivendell Services and Report Ages // -// (C) Copyright 2002-2005,2016 Fred Gleason +// (C) Copyright 2002-2005,2016-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 @@ -21,12 +21,14 @@ #include #include -#include #include -#include -#include -#include -#include +#include +#include + +#include "globals.h" +#include "list_svcs.h" +#include "svc_rec_dialog.h" +#include "pick_report_dates.h" ListSvcs::ListSvcs(QWidget *parent) : QDialog(parent,"",true) @@ -153,7 +155,6 @@ void ListSvcs::resizeEvent(QResizeEvent *e) void ListSvcs::RefreshList() { RDSqlQuery *q1; - QString tablename; QListViewItem *item; list_log_list->clear(); QString sql="select NAME from SERVICES order by NAME"; @@ -162,10 +163,9 @@ void ListSvcs::RefreshList() while(q->next()) { item=new QListViewItem(list_log_list); item->setText(0,q->value(0).toString()); - tablename=q->value(0).toString(); - tablename.replace(" ","_"); - sql=QString().sprintf("select EVENT_DATETIME from `%s_SRT` \ - order by EVENT_DATETIME",(const char *)tablename); + sql=QString("select EVENT_DATETIME from ELR_LINES where ")+ + "SERVICE_NAME=\""+RDEscapeString(q->value(0).toString())+"\" "+ + "order by EVENT_DATETIME"; q1=new RDSqlQuery(sql); if(q1->first()) { item->setText(1,q1->value(0).toDate().toString("MM/dd/yyyy")); @@ -183,10 +183,9 @@ void ListSvcs::RefreshLine(QListViewItem *item) { QString sql; RDSqlQuery *q; - QString tablename=item->text(0); - tablename.replace(" ","_"); - sql=QString().sprintf("select EVENT_DATETIME from `%s_SRT` \ - order by EVENT_DATETIME",(const char *)tablename); + sql=QString("select EVENT_DATETIME from ELR_LINES where ")+ + "SERVICE_NAME=\""+RDEscapeString(item->text(0))+"\" "+ + "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); if(q->first()) { item->setText(1,q->value(0).toDate().toString("MM/dd/yyyy")); diff --git a/rdlogmanager/svc_rec.cpp b/rdlogmanager/svc_rec.cpp index 7f391f98..6b2fac62 100644 --- a/rdlogmanager/svc_rec.cpp +++ b/rdlogmanager/svc_rec.cpp @@ -22,8 +22,11 @@ #include #include #include + #include -#include +#include + +#include "svc_rec.h" // // Global Classes @@ -46,14 +49,12 @@ SvcRec::SvcRec(const QString &svcname,QWidget *parent) // // Generate Date Boundaries // - pick_tablename=svcname; - pick_tablename.replace(" ","_"); QDate current_date=QDate::currentDate(); pick_high_year=current_date.year(); pick_low_year=pick_high_year; - sql=QString().sprintf("select EVENT_DATETIME from `%s_SRT`\ - order by EVENT_DATETIME", - (const char *)pick_tablename); + sql=QString("select EVENT_DATETIME from ELR_LINES where ")+ + "SERVICE_NAME=\""+RDEscapeString(svcname)+"\" "+ + "order by EVENT_DATETIME"; q=new RDSqlQuery(sql); if(q->first()) { pick_low_year=q->value(0).toDate().year(); @@ -214,14 +215,10 @@ void SvcRec::deleteDay() QString sql; RDSqlQuery *q; - QString tablename=pick_service_name; - tablename.replace(" ","_"); - sql=QString().sprintf("delete from `%s_SRT` where \ - (EVENT_DATETIME>=\"%s\")&&\ - (EVENT_DATETIME<=\"%s\")", - (const char *)tablename, - (const char *)date().toString("yyyy-MM-dd 00:00:00"), - (const char *)date().toString("yyyy-MM-dd 23:59:59")); + sql=QString("delete from ELR_LINES where ")+ + "SERVICE_NAME=\""+RDEscapeString(pick_service_name)+"\" && "+ + "EVENT_DATETIME>=\""+date().toString("yyyy-MM-dd 00:00:00")+"\" && "+ + "EVENT_DATETIME<\""+date().addDays(1).toString("yyyy-MM-dd 00:00:00")+"\""; q=new RDSqlQuery(sql); delete q; GetActiveDays(pick_date); @@ -403,13 +400,11 @@ void SvcRec::GetActiveDays(const QDate &date) QString sql; RDSqlQuery *q; - for(int i=0;i<=31;i++) { - sql=QString().sprintf("select ID from `%s_SRT` where \ - (EVENT_DATETIME>=\"%s-%02d 00:00:00\")&&\ - (EVENT_DATETIME<=\"%s-%02d 23:59:59\")", - (const char *)pick_tablename, - (const char *)date.toString("yyyy-MM"),i+1, - (const char *)date.toString("yyyy-MM"),i+1); + for(int i=0;i<=date.daysInMonth();i++) { + sql=QString("select ID from ELR_LINES where ")+ + "SERVICE_NAME=\""+RDEscapeString(pick_service_name)+"\" && "+ + "(EVENT_DATETIME>=\""+date.toString("yyyy-MM")+QString().sprintf("-%02d 00:00:00\")&&",i+1)+ + "(EVENT_DATETIME<=\""+date.toString("yyyy-MM")+QString().sprintf("-%02d 23:59:59\")",i+1); q=new RDSqlQuery(sql); pick_active_days[i]=q->first(); delete q; diff --git a/rdlogmanager/svc_rec.h b/rdlogmanager/svc_rec.h index 70fa1765..877b60aa 100644 --- a/rdlogmanager/svc_rec.h +++ b/rdlogmanager/svc_rec.h @@ -75,7 +75,6 @@ class SvcRec : public QWidget QSpinBox *pick_year_spin; QLabel *pick_date_label[6][7]; QDate pick_date; - QString pick_tablename; int pick_low_year; int pick_high_year; bool pick_active_days[31]; diff --git a/utils/rddbmgr/revertschema.cpp b/utils/rddbmgr/revertschema.cpp index ba7c452f..b00265dd 100644 --- a/utils/rddbmgr/revertschema.cpp +++ b/utils/rddbmgr/revertschema.cpp @@ -37,6 +37,149 @@ bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg) co // corresponding update in updateschema.cpp! // + + // + // Revert 289 + // + if((cur_schema==289)&&(set_schemanext()) { + QString tablename=q->value(0).toString()+"_SRT"; + tablename.replace(" ","_"); + + sql=QString("create table if not exists `")+tablename+"` ("+ + "ID int unsigned auto_increment primary key,"+ + "LENGTH int,"+ + "LOG_NAME char(64),"+ + "LOG_ID int,"+ + "CART_NUMBER int unsigned,"+ + "CUT_NUMBER int,"+ + "TITLE char(255),"+ + "ARTIST char(255),"+ + "PUBLISHER char(64),"+ + "COMPOSER char(64),"+ + "USER_DEFINED char(255),"+ + "SONG_ID char(32),"+ + "ALBUM char(255),"+ + "LABEL char(64),"+ + "CONDUCTOR char(64),"+ + "USAGE_CODE int,"+ + "DESCRIPTION char(64),"+ + "OUTCUE char(64),"+ + "ISRC char(12),"+ + "ISCI char(32),"+ + "STATION_NAME char(64),"+ + "EVENT_DATETIME datetime,"+ + "SCHEDULED_TIME time,"+ + "EVENT_TYPE int,"+ + "EVENT_SOURCE int,"+ + "PLAY_SOURCE int,"+ + "START_SOURCE int default 0,"+ + "ONAIR_FLAG enum('N','Y') default 'N',"+ + "EXT_START_TIME time,"+ + "EXT_LENGTH int,"+ + "EXT_CART_NAME char(32),"+ + "EXT_DATA char(32),"+ + "EXT_EVENT_ID char(8),"+ + "EXT_ANNC_TYPE char(8),"+ + "index EVENT_DATETIME_IDX(EVENT_DATETIME))"+ + db_table_create_postfix; + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + + sql=QString("select ")+ + "LENGTH,"+ // 00 + "LOG_NAME,"+ // 01 + "LOG_ID,"+ // 02 + "CART_NUMBER,"+ // 03 + "CUT_NUMBER,"+ // 04 + "TITLE,"+ // 05 + "ARTIST,"+ // 06 + "PUBLISHER,"+ // 07 + "COMPOSER,"+ // 08 + "USER_DEFINED,"+ // 09 + "SONG_ID,"+ // 10 + "ALBUM,"+ // 11 + "LABEL,"+ // 12 + "CONDUCTOR,"+ // 13 + "USAGE_CODE,"+ // 14 + "DESCRIPTION,"+ // 15 + "OUTCUE,"+ // 16 + "ISRC,"+ // 17 + "ISCI,"+ // 18 + "STATION_NAME,"+ // 19 + "EVENT_DATETIME,"+ // 20 + "SCHEDULED_TIME,"+ // 21 + "EVENT_TYPE,"+ // 22 + "EVENT_SOURCE,"+ // 23 + "PLAY_SOURCE,"+ // 24 + "START_SOURCE,"+ // 25 + "ONAIR_FLAG,"+ // 26 + "EXT_START_TIME,"+ // 27 + "EXT_LENGTH,"+ // 28 + "EXT_CART_NAME,"+ // 29 + "EXT_DATA,"+ // 30 + "EXT_EVENT_ID,"+ // 31 + "EXT_ANNC_TYPE "+ // 32 + "from ELR_LINES where "+ + "SERVICE_NAME=\""+RDEscapeString(q->value(0).toString())+"\""; + q1=new RDSqlQuery(sql,false); + while(q1->next()) { + sql=QString("insert into `")+tablename+"` set "+ + QString().sprintf("LENGTH=%d,",q1->value(0).toInt())+ + "LOG_NAME=\""+RDEscapeString(q1->value(1).toString())+"\","+ + QString().sprintf("LOG_ID=%d,",q1->value(2).toInt())+ + QString().sprintf("CART_NUMBER=%u,",q1->value(3).toUInt())+ + QString().sprintf("CUT_NUMBER=%d,",q1->value(4).toInt())+ + "TITLE=\""+RDEscapeString(q1->value(5).toString())+"\","+ + "ARTIST=\""+RDEscapeString(q1->value(6).toString())+"\","+ + "PUBLISHER=\""+RDEscapeString(q1->value(7).toString())+"\","+ + "COMPOSER=\""+RDEscapeString(q1->value(8).toString())+"\","+ + "USER_DEFINED=\""+RDEscapeString(q1->value(9).toString())+"\","+ + "SONG_ID=\""+RDEscapeString(q1->value(10).toString())+"\","+ + "ALBUM=\""+RDEscapeString(q1->value(11).toString())+"\","+ + "LABEL=\""+RDEscapeString(q1->value(12).toString())+"\","+ + "CONDUCTOR=\""+RDEscapeString(q1->value(13).toString())+"\","+ + "USAGE_CODE=\""+RDEscapeString(q1->value(14).toString())+"\","+ + "DESCRIPTIONS=\""+RDEscapeString(q1->value(15).toString())+"\","+ + "OUTCUE=\""+RDEscapeString(q1->value(16).toString())+"\","+ + "ISRC=\""+RDEscapeString(q1->value(17).toString())+"\","+ + "ISCI=\""+RDEscapeString(q1->value(18).toString())+"\","+ + "STATION_NAME=\""+RDEscapeString(q1->value(19).toString())+"\","+ + "EVENT_DATETIME=\""+RDEscapeString(q1->value(20).toDateTime(). + toString("yyyy-MM-dd hh:mm:ss"))+"\","+ + "SCHEDULED_TIME=\""+RDEscapeString(q1->value(21).toTime(). + toString("hh:mm:ss"))+"\","+ + QString().sprintf("EVENT_TYPE=%d,",q1->value(22).toInt())+ + QString().sprintf("EVENT_SOURCE=%d,",q1->value(23).toInt())+ + QString().sprintf("PLAY_SOURCE=%d,",q1->value(24).toInt())+ + QString().sprintf("START_SOURCE=%d,",q1->value(25).toInt())+ + "ONAIR_FLAG=\""+RDEscapeString(q1->value(26).toString())+"\","+ + "EXT_START_TIME=\""+RDEscapeString(q1->value(27).toTime(). + toString("hh:mm:ss"))+"\","+ + QString().sprintf("EXT_LENGTH=%d,",q1->value(28).toInt())+ + "EXT_CART_NAME=\""+RDEscapeString(q1->value(29).toString())+"\","+ + "EXT_DATA=\""+RDEscapeString(q1->value(30).toString())+"\","+ + "EXT_EVENT_ID=\""+RDEscapeString(q1->value(31).toString())+"\","+ + "EXT_ANNC_TYPE=\""+RDEscapeString(q1->value(32).toString())+"\""; + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + } + delete q1; + } + delete q; + + sql=QString("drop table ELR_LINES"); + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + + cur_schema--; + } + // // Revert 288 // diff --git a/utils/rddbmgr/schemamap.cpp b/utils/rddbmgr/schemamap.cpp index c9dd1be3..1495bcf6 100644 --- a/utils/rddbmgr/schemamap.cpp +++ b/utils/rddbmgr/schemamap.cpp @@ -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"]=287; + global_version_map["2.20"]=289; } diff --git a/utils/rddbmgr/updateschema.cpp b/utils/rddbmgr/updateschema.cpp index 93d84a15..f4e34ef1 100644 --- a/utils/rddbmgr/updateschema.cpp +++ b/utils/rddbmgr/updateschema.cpp @@ -7338,6 +7338,144 @@ bool MainObject::UpdateSchema(int cur_schema,int set_schema,QString *err_msg) co cur_schema++; } + if((cur_schema<289)&&(set_schema>cur_schema)) { + sql=QString("create table if not exists ELR_LINES (")+ + "ID int unsigned auto_increment primary key,"+ + "SERVICE_NAME char(10) not null,"+ + "EVENT_DATETIME datetime not null,"+ + "LENGTH int,"+ + "LOG_NAME char(64),"+ + "LOG_ID int,"+ + "CART_NUMBER int unsigned,"+ + "CUT_NUMBER int,"+ + "TITLE char(255),"+ + "ARTIST char(255),"+ + "PUBLISHER char(64),"+ + "COMPOSER char(64),"+ + "USER_DEFINED char(255),"+ + "SONG_ID char(32),"+ + "ALBUM char(255),"+ + "LABEL char(64),"+ + "CONDUCTOR char(64),"+ + "USAGE_CODE int,"+ + "DESCRIPTION char(64),"+ + "OUTCUE char(64),"+ + "ISRC char(12),"+ + "ISCI char(32),"+ + "STATION_NAME char(64),"+ + "SCHEDULED_TIME time,"+ + "EVENT_TYPE int,"+ + "EVENT_SOURCE int,"+ + "PLAY_SOURCE int,"+ + "START_SOURCE int default 0,"+ + "ONAIR_FLAG enum('N','Y') default 'N',"+ + "EXT_START_TIME time,"+ + "EXT_LENGTH int,"+ + "EXT_CART_NAME char(32),"+ + "EXT_DATA char(32),"+ + "EXT_EVENT_ID char(8),"+ + "EXT_ANNC_TYPE char(8),"+ + "index SERVICE_NAME_EVENT_DATETIME_IDX(SERVICE_NAME,EVENT_DATETIME))"+ + db_table_create_postfix; + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + + sql=QString("select NAME from SERVICES"); + q=new RDSqlQuery(sql,false); + while(q->next()) { + QString tablename=q->value(0).toString()+"_SRT"; + tablename.replace(" ","_"); + sql=QString("select ")+ + "LENGTH,"+ // 00 + "LOG_NAME,"+ // 01 + "LOG_ID,"+ // 02 + "CART_NUMBER,"+ // 03 + "CUT_NUMBER,"+ // 04 + "TITLE,"+ // 05 + "ARTIST,"+ // 06 + "PUBLISHER,"+ // 07 + "COMPOSER,"+ // 08 + "USER_DEFINED,"+ // 09 + "SONG_ID,"+ // 10 + "ALBUM,"+ // 11 + "LABEL,"+ // 12 + "CONDUCTOR,"+ // 13 + "USAGE_CODE,"+ // 14 + "DESCRIPTION,"+ // 15 + "OUTCUE,"+ // 16 + "ISRC,"+ // 17 + "ISCI,"+ // 18 + "STATION_NAME,"+ // 19 + "EVENT_DATETIME,"+ // 20 + "SCHEDULED_TIME,"+ // 21 + "EVENT_TYPE,"+ // 22 + "EVENT_SOURCE,"+ // 23 + "PLAY_SOURCE,"+ // 24 + "START_SOURCE,"+ // 25 + "ONAIR_FLAG,"+ // 26 + "EXT_START_TIME,"+ // 27 + "EXT_LENGTH,"+ // 28 + "EXT_CART_NAME,"+ // 29 + "EXT_DATA,"+ // 30 + "EXT_EVENT_ID,"+ // 31 + "EXT_ANNC_TYPE "+ // 32 + "from `"+tablename+"`"; + q1=new RDSqlQuery(sql,false); + while(q1->next()) { + sql=QString("insert into ELR_LINES set ")+ + "SERVICE_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+ + QString().sprintf("LENGTH=%d,",q1->value(0).toInt())+ + "LOG_NAME=\""+RDEscapeString(q1->value(1).toString())+"\","+ + QString().sprintf("LOG_ID=%d,",q1->value(2).toInt())+ + QString().sprintf("CART_NUMBER=%u,",q1->value(3).toUInt())+ + QString().sprintf("CUT_NUMBER=%d,",q1->value(4).toInt())+ + "TITLE=\""+RDEscapeString(q1->value(5).toString())+"\","+ + "ARTIST=\""+RDEscapeString(q1->value(6).toString())+"\","+ + "PUBLISHER=\""+RDEscapeString(q1->value(7).toString())+"\","+ + "COMPOSER=\""+RDEscapeString(q1->value(8).toString())+"\","+ + "USER_DEFINED=\""+RDEscapeString(q1->value(9).toString())+"\","+ + "SONG_ID=\""+RDEscapeString(q1->value(10).toString())+"\","+ + "ALBUM=\""+RDEscapeString(q1->value(11).toString())+"\","+ + "LABEL=\""+RDEscapeString(q1->value(12).toString())+"\","+ + "CONDUCTOR=\""+RDEscapeString(q1->value(13).toString())+"\","+ + "USAGE_CODE=\""+RDEscapeString(q1->value(14).toString())+"\","+ + "DESCRIPTIONS=\""+RDEscapeString(q1->value(15).toString())+"\","+ + "OUTCUE=\""+RDEscapeString(q1->value(16).toString())+"\","+ + "ISRC=\""+RDEscapeString(q1->value(17).toString())+"\","+ + "ISCI=\""+RDEscapeString(q1->value(18).toString())+"\","+ + "STATION_NAME=\""+RDEscapeString(q1->value(19).toString())+"\","+ + "EVENT_DATETIME=\""+RDEscapeString(q1->value(20).toDateTime(). + toString("yyyy-MM-dd hh:mm:ss"))+"\","+ + "SCHEDULED_TIME=\""+RDEscapeString(q1->value(21).toTime(). + toString("hh:mm:ss"))+"\","+ + QString().sprintf("EVENT_TYPE=%d,",q1->value(22).toInt())+ + QString().sprintf("EVENT_SOURCE=%d,",q1->value(23).toInt())+ + QString().sprintf("PLAY_SOURCE=%d,",q1->value(24).toInt())+ + QString().sprintf("START_SOURCE=%d,",q1->value(25).toInt())+ + "ONAIR_FLAG=\""+RDEscapeString(q1->value(26).toString())+"\","+ + "EXT_START_TIME=\""+RDEscapeString(q1->value(27).toTime(). + toString("hh:mm:ss"))+"\","+ + QString().sprintf("EXT_LENGTH=%d,",q1->value(28).toInt())+ + "EXT_CART_NAME=\""+RDEscapeString(q1->value(29).toString())+"\","+ + "EXT_DATA=\""+RDEscapeString(q1->value(30).toString())+"\","+ + "EXT_EVENT_ID=\""+RDEscapeString(q1->value(31).toString())+"\","+ + "EXT_ANNC_TYPE=\""+RDEscapeString(q1->value(32).toString())+"\""; + 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++; + } + // // Maintainer's Note: diff --git a/utils/rdmaint/rdmaint.cpp b/utils/rdmaint/rdmaint.cpp index 8ce157ac..037a7e3c 100644 --- a/utils/rdmaint/rdmaint.cpp +++ b/utils/rdmaint/rdmaint.cpp @@ -223,16 +223,18 @@ void MainObject::PurgeElr() RDSqlQuery *q1; QDateTime dt=QDateTime(QDate::currentDate(),QTime::currentTime()); - sql="select NAME,ELR_SHELFLIFE from SERVICES where ELR_SHELFLIFE>=0"; + sql=QString("select ")+ + "NAME,"+ + "ELR_SHELFLIFE "+ + "from SERVICES where "+ + "ELR_SHELFLIFE>=0"; q=new RDSqlQuery(sql); while(q->next()) { - QString tablename=q->value(0).toString()+"_SRT"; - tablename.replace(" ","_"); - sql=QString("delete from `")+tablename+"` where "+ + sql=QString("delete from ELR_LINES where ")+ + "SERVICE_NAME=\""+RDEscapeString(q->value(0).toString())+"\" && "+ "EVENT_DATETIME<\""+ dt.addDays(-q->value(1).toInt()).toString("yyyy-MM-dd")+" 00:00:00\""; - q1=new RDSqlQuery(sql); - delete q1; + RDSqlQuery::apply(sql); } delete q; }