Fixes for invalid NULL sql on date/times

Most files are simple swaps to get rid of extra " as a NULL return will give
invalid SQL if used as follows UPDATE x SET y="NULL";

See github issue 121 for more info.

Extra changes have been made to the following files:
* lib/rdcartslot.cpp
- Added a QDateTime variable to prevent EVENT_DATETIME becoming
  "2016-06-09" "NULL" as it was checked separately for date and time
* lib/rdcut.cpp
- Reworked START_DATETIME and END_DATETIME to save the SQL ifs.  I believe this
  makes it easier to read and understand.
- The >QDate(1900,1,1) and < 8000 is probably not needed but I left it there
  just in case.
* lib/rdescape_string.cpp
- Reworked to add extra " if the date is not NULL see issue 121
* lib/rdfeed.cpp && lib/rdpodcast.cpp
- Had to add a SetRow for QDateTime as with the string conversion the existing
  SetRow would add an extra set of "
* lib/rdsound_panel.cpp && rdairplay/log_traffic.cpp
        && utils/rddgimport/rddgimport.cpp
- Added a QString to contain EVENT_DATETIME to prevent double checks of date
  and time separately (similar to lib/rdcartslot.cpp)
* rdcatchd/rdcatchd.cpp
- Reverted the changes.  The RML here is not touching the DB so is fine, plus
  with the RDCheckDateTime changes you'd have extra " unless it was NULL
* tests/sas_switch_torture.cpp && sas_torture.cpp
- Included missing rdescape_string.h
This commit is contained in:
Wayne Merricks 2016-06-09 00:01:38 +01:00
parent 9f52968a02
commit f1175cd2f2
21 changed files with 131 additions and 71 deletions

View File

@ -274,7 +274,7 @@ MainObject::MainObject(QObject *parent)
TITLE=\"%s\",\
ARTIST=\"%s\",\
ALBUM=\"%s\",\
YEAR=\"%s\",\
YEAR=%s,\
ISRC=\"%s\",\
LABEL=\"%s\",\
CLIENT=\"%s\",\
@ -347,7 +347,7 @@ MainObject::MainObject(QObject *parent)
start_datetime="null";
}
else {
start_datetime=QString().sprintf("\"%s\"",
start_datetime=QString().sprintf("%s",
(const char *)RDCheckDateTime(q1->value(7).
toDateTime(),"yyyy-MM-dd hh:mm:ss"));//Could be invalid (0000-00-00)
}
@ -355,7 +355,7 @@ MainObject::MainObject(QObject *parent)
end_datetime="null";
}
else {
end_datetime=QString().sprintf("\"%s\"",
end_datetime=QString().sprintf("%s",
(const char *)RDCheckDateTime(q1->value(8).
toDateTime(),"yyyy-MM-dd hh:mm:ss"));//Could be invalid (0000-00-00)
}
@ -363,7 +363,7 @@ MainObject::MainObject(QObject *parent)
start_daypart="null";
}
else {
start_daypart=QString().sprintf("\"%s\"",
start_daypart=QString().sprintf("%s",
(const char *)RDCheckDateTime(q1->value(16).
toTime(),"hh:mm:ss"));//Invalid possible?
}
@ -371,7 +371,7 @@ MainObject::MainObject(QObject *parent)
end_daypart="null";
}
else {
end_daypart=QString().sprintf("\"%s\"",
end_daypart=QString().sprintf("%s",
(const char *)RDCheckDateTime(q1->value(17).
toTime(),"hh:mm:ss"));//Invalid possible?
}

View File

@ -1206,14 +1206,14 @@ void RDCart::updateLength(bool enforce_length,unsigned length)
sql+="START_DATETIME=NULL,";
}
else {
sql+=QString().sprintf("START_DATETIME=\"%s\",",
sql+=QString().sprintf("START_DATETIME=%s,",
(const char *)RDCheckDateTime(start_datetime,"yyyy-MM-dd hh:mm:ss"));
}
if(end_datetime.isNull()||(!dates_valid)) {
sql+="END_DATETIME=NULL,";
}
else {
sql+=QString().sprintf("END_DATETIME=\"%s\",",
sql+=QString().sprintf("END_DATETIME=%s,",
(const char *)RDCheckDateTime(end_datetime,"yyyy-MM-dd hh:mm:ss"));
}
sql+=QString().sprintf("VALIDITY=%u where NUMBER=%u",
@ -1738,7 +1738,7 @@ void RDCart::SetRow(const QString &param,const QDateTime &value) const
RDSqlQuery *q;
QString sql;
sql=QString().sprintf("UPDATE CART SET %s=\"%s\" WHERE NUMBER=%u",
sql=QString().sprintf("UPDATE CART SET %s=%s WHERE NUMBER=%u",
(const char *)param,
(const char *)RDCheckDateTime(value,"yyyy-MM-dd hh:mm:ss"),
cart_number);
@ -1752,7 +1752,7 @@ void RDCart::SetRow(const QString &param,const QDate &value) const
RDSqlQuery *q;
QString sql;
sql=QString().sprintf("UPDATE CART SET %s=\"%s\" WHERE NUMBER=%u",
sql=QString().sprintf("UPDATE CART SET %s=%s WHERE NUMBER=%u",
(const char *)param,
(const char *)RDCheckDateTime(value,"yyyy-MM-dd"),
cart_number);

View File

@ -670,6 +670,8 @@ void RDCartSlot::LogPlayout(RDPlayDeck::State state)
datetime.setDate(datetime.date().addDays(-1));
}
if(!slot_svcname.isEmpty()) {
QDateTime eventDateTime=QDateTime::QDateTime(datetime::date(),
slot_logline->startTime(RDLogLine::Actual));
QString svctablename=slot_svcname;
svctablename.replace(" ","_");
sql=QString("insert into `")+svctablename+"_SRT` set "+
@ -687,19 +689,18 @@ void RDCartSlot::LogPlayout(RDPlayDeck::State state)
slot_logline->usageCode(),
slot_logline->startSource())+
"STATION_NAME=\""+RDEscapeString(slot_station->name())+"\","+
"EVENT_DATETIME=\""+datetime.toString("yyyy-MM-dd")+
" "+RDCheckDateTime(
slot_logline->startTime(RDLogLine::Actual),"hh:mm:ss")+"\","+
"EXT_START_TIME=\""+RDCheckDateTime(
slot_logline->extStartTime(),"hh:mm:ss")+"\","+
"EVENT_DATETIME="+RDCheckDateTime(eventDateTime,"yyyy-MM-dd hh:mm:ss")+
","+
"EXT_START_TIME="+RDCheckDateTime(
slot_logline->extStartTime(),"hh:mm:ss")+","+
"EXT_DATA=\""+RDEscapeString(slot_logline->extData())+"\","+
"EXT_EVENT_ID=\""+RDEscapeString(slot_logline->extEventId())+"\","+
"EXT_ANNC_TYPE=\""+RDEscapeString(slot_logline->extAnncType())+"\","+
"EXT_CART_NAME=\""+RDEscapeString(slot_logline->extCartName())+"\","+
"TITLE=\""+RDEscapeString(slot_logline->title())+"\","+
"ARTIST=\""+RDEscapeString(slot_logline->artist())+"\","+
"SCHEDULED_TIME=\""+RDCheckDateTime(
slot_logline->startTime(RDLogLine::Logged),"hh:mm:ss")+"\","+
"SCHEDULED_TIME="+RDCheckDateTime(
slot_logline->startTime(RDLogLine::Logged),"hh:mm:ss")+","+
"ISRC=\""+RDEscapeString(slot_logline->isrc())+"\","+
"PUBLISHER=\""+RDEscapeString(slot_logline->publisher())+"\","+
"COMPOSER=\""+RDEscapeString(slot_logline->composer())+"\","+

View File

@ -1060,8 +1060,8 @@ void RDCut::setMetadata(RDWaveData *data) const
}
if(data->daypartStartTime().isValid()&&data->daypartEndTime().isValid()&&
(data->daypartStartTime()<data->daypartEndTime())) {
sql+="START_DAYPART=\""+RDCheckDateTime(data->daypartStartTime(),"hh:mm:ss")+"\","+
"END_DAYPART=\""+RDCheckDateTime(data->daypartEndTime(),"hh:mm:ss")+"\",";
sql+="START_DAYPART="+RDCheckDateTime(data->daypartStartTime(),"hh:mm:ss")+","+
"END_DAYPART="+RDCheckDateTime(data->daypartEndTime(),"hh:mm:ss")+",";
}
if((data->hookStartPos()>=data->startPos())&&
(data->hookStartPos()<=data->endPos())&&
@ -1079,26 +1079,36 @@ void RDCut::setMetadata(RDWaveData *data) const
(data->fadeDownPos()<=data->endPos())) {
sql+=QString().sprintf("FADEDOWN_POINT=%d,",data->fadeDownPos());
}
if((data->startDate()>QDate(1900,1,1))&&(data->endDate().year()<8000)) {
if(data->startTime().isValid()) {
sql+=QString().sprintf("START_DATETIME=\"%s %s\",",
(const char *)RDCheckDateTime(data->startDate(),"yyyy-MM-dd"),
(const char *)RDCheckDateTime(data->startTime(),"hh:mm:ss"));
}
else {
sql+=QString().sprintf("START_DATETIME=\"%s 00:00:00\",",
(const char *)RDCheckDateTime(data->startDate(),"yyyy-MM-dd"));
}
if(data->startDate().isValid() &&
(data->startDate()>QDate(1900,1,1))&&(data->endDate().year()<8000)) {
/* Reworked,
* if date not valid, do nothing
* if time valid use date + time
* else use date + 00:00:00
*/
QDateTime startDateTime(data->startDate());
if(data->startTime().isValid())
startDateTime.setTime(data->startTime());
else
startDateTime.setTime(QTime(0,0,0));
sql+=QString().sprintf("START_DATETIME=%s,",
(const char *)RDCheckDateTime(startDateTime));
if(data->endDate().isValid()&&(data->endDate().year()<8000)) {
if(data->endTime().isValid()) {
sql+=QString().sprintf("END_DATETIME=\"%s %s\",",
(const char *)RDCheckDateTime(data->endDate(),"yyyy-MM-dd"),
(const char *)RDCheckDateTime(data->endTime(),"hh:mm:ss"));
}
else {
sql+=QString().sprintf("END_DATETIME=\"%s 23:59:59\",",
(const char *)RDCheckDateTime(data->endDate(),"yyyy-MM-dd"));
}
// Reworked as START_DATETIME
QDateTime endDateTime(data->endDate());
if(data->endTime().isValid())
endDateTime.setTime(data->endTime());
else
endDateTime.setTime(QTime(23,59,59));
sql+=QString().sprintf("END_DATETIME=%s,",
(const char *)RDCheckDateTime(endDateTime,"yyyy-MM-dd hh:mm:ss"));
}
}
if(sql.right(1)==",") {
@ -1597,7 +1607,7 @@ void RDCut::SetRow(const QString &param,const QDateTime &value) const
RDSqlQuery *q;
QString sql;
sql=QString().sprintf("UPDATE CUTS SET %s=\"%s\" WHERE CUT_NAME=\"%s\"",
sql=QString().sprintf("UPDATE CUTS SET %s=%s WHERE CUT_NAME=\"%s\"",
(const char *)param,
(const char *)RDCheckDateTime(value,"yyyy-MM-dd hh:mm:ss"),
(const char *)cut_name);
@ -1611,7 +1621,7 @@ void RDCut::SetRow(const QString &param,const QDate &value) const
RDSqlQuery *q;
QString sql;
sql=QString().sprintf("UPDATE CUTS SET %s=\"%s\" WHERE CUT_NAME=\"%s\"",
sql=QString().sprintf("UPDATE CUTS SET %s=%s WHERE CUT_NAME=\"%s\"",
(const char *)param,
(const char *)RDCheckDateTime(value,"yyyy-MM-dd"),
(const char *)cut_name);
@ -1624,7 +1634,7 @@ void RDCut::SetRow(const QString &param,const QTime &value) const
{
RDSqlQuery *q;
QString sql;
sql=QString().sprintf("UPDATE CUTS SET %s=\"%s\" WHERE CUT_NAME=\"%s\"",
sql=QString().sprintf("UPDATE CUTS SET %s=%s WHERE CUT_NAME=\"%s\"",
(const char *)param,
(const char *)RDCheckDateTime(value,"hh:mm:ss"),
(const char *)cut_name);

View File

@ -34,7 +34,7 @@ QString RDCheckDateTime(QTime const &time, QString const &format)
QString checkedValue = "NULL";
if(time.isValid())
checkedValue = time.toString(format);
checkedValue = "\"" + time.toString(format) + "\"";
return checkedValue;
@ -51,7 +51,7 @@ QString RDCheckDateTime(QDateTime const &datetime, QString const &format)
QString checkedValue = "NULL";
if(datetime.isValid())
checkedValue = datetime.toString(format);
checkedValue = "\"" + datetime.toString(format) + "\"";
return checkedValue;
@ -68,7 +68,7 @@ QString RDCheckDateTime(QDate const &date, QString const &format)
QString checkedValue = "NULL";
if(date.isValid())
checkedValue = date.toString(format);
checkedValue = "\"" + date.toString(format) + "\"";
return checkedValue;

View File

@ -814,7 +814,7 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
sql=QString().sprintf("insert into `%s_LOG` set ID=%d,COUNT=%d,TYPE=%d,\
SOURCE=%d,START_TIME=%d,GRACE_TIME=%d, \
CART_NUMBER=%u,TIME_TYPE=%d,POST_POINT=\"%s\", \
TRANS_TYPE=%d,EXT_START_TIME=\"%s\",\
TRANS_TYPE=%d,EXT_START_TIME=%s,\
EVENT_LENGTH=%d",
(const char *)logname,count,count,
RDLogLine::Cart,source,

View File

@ -320,7 +320,7 @@ QDateTime RDFeed::lastBuildDateTime() const
void RDFeed::setLastBuildDateTime(const QDateTime &datetime) const
{
SetRow("LAST_BUILD_DATETIME",RDCheckDateTime(datetime,"yyyy-MM-dd hh:mm:ss"));
SetRow("LAST_BUILD_DATETIME",datetime,"yyyy-MM-dd hh:mm:ss");
}
@ -333,7 +333,7 @@ QDateTime RDFeed::originDateTime() const
void RDFeed::setOriginDateTime(const QDateTime &datetime) const
{
SetRow("ORIGIN_DATETIME",RDCheckDateTime(datetime,"yyyy-MM-dd hh:mm:ss"));
SetRow("ORIGIN_DATETIME",datetime,"yyyy-MM-dd hh:mm:ss");
}
@ -896,3 +896,17 @@ void RDFeed::SetRow(const QString &param,const QString &value) const
q=new RDSqlQuery(sql);
delete q;
}
void RDFeed::SetRow(const QString &param,const QDateTime &value,
const QString format) const
{
RDSqlQuery *q;
QString sql;
sql=QString().sprintf("UPDATE FEEDS SET %s=%s WHERE KEY_NAME=\"%s\"",
(const char *)param,
(const char *)RDCheckDateTime(value, format),
(const char *)feed_keyname);
q=new RDSqlQuery(sql);
delete q;
}

View File

@ -661,7 +661,7 @@ void RDLog::SetRow(const QString &param,const QDate &value) const
RDSqlQuery *q;
QString sql;
sql=QString().sprintf("UPDATE LOGS SET %s=\"%s\" WHERE NAME=\"%s\"",
sql=QString().sprintf("UPDATE LOGS SET %s=%s WHERE NAME=\"%s\"",
(const char *)param,
(const char *)RDCheckDateTime(value,"yyyy/MM/dd"),
(const char *)RDEscapeString(log_name));
@ -675,7 +675,7 @@ void RDLog::SetRow(const QString &param,const QDateTime &value) const
RDSqlQuery *q;
QString sql;
sql=QString().sprintf("UPDATE LOGS SET %s=\"%s\" WHERE NAME=\"%s\"",
sql=QString().sprintf("UPDATE LOGS SET %s=%s WHERE NAME=\"%s\"",
(const char *)param,
(const char *)RDCheckDateTime(value,"yyyy-MM-dd hh:mm:ss"),
(const char *)RDEscapeString(log_name));

View File

@ -1186,7 +1186,7 @@ void RDLogEvent::InsertLines(QString values) {
void RDLogEvent::InsertLineValues(QString *query, int line)
{
// one line to save query space
QString sql=QString().sprintf("(%d,%d,%u,%d,%d,%d,%d,%d,%d,%d,%d,\"%s\",\"%s\",%d,%d,\"%s\",%d,\"%s\",\"%s\",\"%s\",\"%s\",%d,%d,%d,%d,%d,\"%s\",%d,%d,%d,\"%s\",\"%s\",\"%s\",%d,%d,%d,%d,%d)",
QString sql=QString().sprintf("(%d,%d,%u,%d,%d,%d,%d,%d,%d,%d,%d,\"%s\",\"%s\",%d,%d,%s,%d,\"%s\",\"%s\",\"%s\",\"%s\",%d,%d,%d,%d,%d,\"%s\",%d,%d,%d,\"%s\",\"%s\",%s,%d,%d,%d,%d,%d)",
log_line[line]->id(),
line,
log_line[line]->cartNumber(),

View File

@ -209,7 +209,7 @@ QDateTime RDPodcast::originDateTime() const
void RDPodcast::setOriginDateTime(const QDateTime &datetime) const
{
SetRow("ORIGIN_DATETIME",RDCheckDateTime(datetime,"yyyy-MM-dd hh:mm:ss"));
SetRow("ORIGIN_DATETIME",datetime,"yyyy-MM-dd hh:mm:ss");
}
@ -222,7 +222,7 @@ QDateTime RDPodcast::effectiveDateTime() const
void RDPodcast::setEffectiveDateTime(const QDateTime &datetime) const
{
SetRow("EFFECTIVE_DATETIME",RDCheckDateTime(datetime,"yyyy-MM-dd hh:mm:ss"));
SetRow("EFFECTIVE_DATETIME",datetime,"yyyy-MM-dd hh:mm:ss");
}
@ -398,3 +398,18 @@ void RDPodcast::SetRow(const QString &param,const QString &value) const
q=new RDSqlQuery(sql);
delete q;
}
void RDPodcast::SetRow(const QString &param,const QDateTime &value,
const QString &format) const
{
RDSqlQuery *q;
QString sql;
sql=QString().sprintf("UPDATE PODCASTS SET %s=%s WHERE ID=%u",
(const char *)param,
(const char *)RDCheckDateTime(value, format),
podcast_id);
q=new RDSqlQuery(sql);
delete q;
}

View File

@ -945,7 +945,7 @@ void RDRecording::SetRow(const QString &param,const QTime &value) const
RDSqlQuery *q;
QString sql;
sql=QString().sprintf("update RECORDINGS set %s=\"%s\" where ID=%d",
sql=QString().sprintf("update RECORDINGS set %s=%s where ID=%d",
(const char *)param,
(const char *)RDCheckDateTime(value,"hh:mm:ss"),rec_id);
q=new RDSqlQuery(sql);

View File

@ -557,8 +557,8 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate,
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")+"\","+
"EVENT_DATETIME="+RDCheckDateTime(q1->value(4).toDateTime(),
"yyyy-MM-dd hh:mm:ss")+","+
QString().sprintf("EVENT_TYPE=%d,",q1->value(5).toInt())+
"EXT_START_TIME=\""+RDEscapeString(q1->value(6).toString())+"\","+
QString().sprintf("EXT_LENGTH=%d,",q1->value(7).toInt())+
@ -573,8 +573,8 @@ bool RDReport::generateReport(const QDate &startdate,const QDate &enddate,
"LOG_NAME=\""+RDEscapeString(q1->value(15).toString())+"\","+
"TITLE=\""+RDEscapeString(q1->value(16).toString())+"\","+
"ARTIST=\""+RDEscapeString(q1->value(17).toString())+"\","+
"SCHEDULED_TIME=\""+
RDCheckDateTime(q1->value(18).toDate(),"yyyy-MM-dd hh:mm:ss")+"\","+
"SCHEDULED_TIME="+
RDCheckDateTime(q1->value(18).toDate(),"yyyy-MM-dd hh:mm:ss")+","+
QString().sprintf("START_SOURCE=%d,",q1->value(19).toInt())+
"PUBLISHER=\""+RDEscapeString(q1->value(20).toString())+"\","+
"COMPOSER=\""+RDEscapeString(q1->value(21).toString())+"\","+
@ -923,7 +923,7 @@ void RDReport::SetRow(const QString &param,const QTime &value) const
RDSqlQuery *q;
QString sql;
sql=QString().sprintf("UPDATE REPORTS SET %s=\"%s\" WHERE NAME=\"%s\"",
sql=QString().sprintf("UPDATE REPORTS SET %s=%s WHERE NAME=\"%s\"",
(const char *)param,
(const char *)RDCheckDateTime(value, "hh:mm:ss"),
(const char *)report_name);

View File

@ -1485,13 +1485,19 @@ void RDSoundPanel::LogTraffic(RDPanelButton *button)
"CUTS.CUT_NAME=\""+RDEscapeString(button->cutName())+"\"";
q=new RDSqlQuery(sql);
if(q->first()) {
QString eventDateTimeSQL = "NULL";
if(dateTime.isValid() && button->startTime().isValid())
eventDateTimeSQL = RDCheckDateTime(QDateTime(dateTime.date(),
button->startTime()), "yyyy-MM-dd hh:mm:ss");
sql=QString("insert into `")+panel_svcname+"_SRT` set "+
QString().sprintf("LENGTH=%d,",button->startTime().
msecsTo(datetime.time()))+
QString().sprintf("CART_NUMBER=%u,",button->cart())+
"STATION_NAME=\""+RDEscapeString(panel_station->name().utf8())+"\","+
"EVENT_DATETIME=\""+datetime.toString("yyyy-MM-dd")+" "+
RDCheckDateTime(button->startTime(),"hh:mm:ss")+"\","+
"EVENT_DATETIME="+eventDateTimeSQL+","+
QString().sprintf("EVENT_TYPE=%d,",RDAirPlayConf::TrafficStop)+
QString().sprintf("EVENT_SOURCE=%d,",RDLogLine::SoundPanel)+
QString().sprintf("PLAY_SOURCE=%d,",RDLogLine::SoundPanel)+

View File

@ -788,7 +788,7 @@ bool RDSvc::generateLog(const QDate &date,const QString &logname,
SERVICE=\"%s\",DESCRIPTION=\"%s\",\
ORIGIN_USER=\"%s\",ORIGIN_DATETIME=now(),\
LINK_DATETIME=now(),MODIFIED_DATETIME=now(),\
PURGE_DATE=\"%s\"",
PURGE_DATE=%s",
(const char *)RDEscapeString(logname),
(const char *)RDEscapeString(svc_name),
(const char *)RDEscapeString(RDDateDecode(descriptionTemplate(),date)),

View File

@ -44,14 +44,20 @@ void LogTraffic(const QString &svcname,const QString &logname,
if((logline==NULL)||(svcname.isEmpty())) {
return;
}
QString eventDateTimeSQL = "NULL";
if(datetime.isValid() && logline->startTime(RDLogLine::Actual).isValid())
eventDateTimeSQL = RDCheckDateTime(QDateTime(datetime.date(),
logline->startTime(RDLogLine::Actual)), "yyyy-MM-dd hh:mm:ss");
sql=QString("insert into `")+RDSvc::svcTableName(svcname)+"` set "+
QString().sprintf("LENGTH=%d,",length)+
"LOG_NAME=\""+RDEscapeString(logname.utf8())+"\","+
QString().sprintf("LOG_ID=%d,",logline->id())+
QString().sprintf("CART_NUMBER=%u,",logline->cartNumber())+
"STATION_NAME=\""+RDEscapeString(rdstation_conf->name().utf8())+"\","+
"EVENT_DATETIME=\""+datetime.toString("yyyy-MM-dd")+" "+
RDCheckDateTime(logline->startTime(RDLogLine::Actual),"hh:mm:ss")+"\","+
"EVENT_DATETIME="+eventDateTimeSQL+","+
QString().sprintf("EVENT_TYPE=%d,",action)+
QString().sprintf("EVENT_SOURCE=%d,",logline->source())+
"EXT_START_TIME=\""+RDCheckDateTime(logline->extStartTime(),"hh:mm:ss")+"\","+
@ -64,8 +70,8 @@ void LogTraffic(const QString &svcname,const QString &logname,
"EXT_CART_NAME=\""+RDEscapeString(logline->extCartName().utf8())+"\","+
"TITLE=\""+RDEscapeString(logline->title().utf8())+"\","+
"ARTIST=\""+RDEscapeString(logline->artist().utf8())+"\","+
"SCHEDULED_TIME=\""+RDCheckDateTime(logline->startTime(RDLogLine::Logged),
"hh:mm:ss")+"\","+
"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())+"\","+

View File

@ -2609,7 +2609,7 @@ void MainObject::ResolveErrorWildcards(CatchEvent *event,
rml->replace("%d",event->description());
rml->replace("%e",err_desc); // Error Description
rml->replace("%i",QString().sprintf("%u",event->id()));
rml->replace("%t",RDCheckDateTime(event->startTime(),"hh:mm:ss"));
rml->replace("%t",event->startTime().toString("hh:mm:ss"));
rml->replace("%y",RDRecording::typeString(event->type()));
switch(event->type()) {
case RDRecording::Recording:

View File

@ -29,6 +29,7 @@
#include <rd.h>
#include <rddb.h>
#include <sas_switch_torture.h>
#include <rdescape_string.h>
MainWidget::MainWidget(QWidget *parent)
:QWidget(parent)
@ -123,7 +124,7 @@ void MainWidget::generateData()
SUN=\'Y\',MON=\'Y\',TUE=\'Y\',WED=\'Y\',THU=\'Y\',\
FRI=\'Y\',SAT=\'Y\',DESCRIPTION=\"%s\",\
CUT_NAME=\"SAS_SWITCH_TORTURE\",\
START_TIME=\"%s\",TYPE=1",
START_TIME=%s,TYPE=1",
SAS_STATION,
SAS_MATRIX,
j+1,

View File

@ -29,6 +29,7 @@
#include <rd.h>
#include <rddb.h>
#include <sas_torture.h>
#include <rdescape_string.h>
MainWidget::MainWidget(QWidget *parent)
:QWidget(parent)
@ -137,7 +138,7 @@ void MainWidget::generateData()
SUN=\'Y\',MON=\'Y\',TUE=\'Y\',WED=\'Y\',THU=\'Y\',\
FRI=\'Y\',SAT=\'Y\',DESCRIPTION=\"%s\",\
CUT_NAME=\"SAS_TORTURE\",MACRO_CART=%d,\
START_TIME=\"%s\",TYPE=1",
START_TIME=%s,TYPE=1",
SAS_STATION,
(const char *)desc,
CART_START+j,

View File

@ -431,6 +431,12 @@ bool MainWidget::CheckSpot(const QString &isci)
QDate today=QDate::currentDate();
QDate killdate=dg_date_edit->date().addDays(RDDGIMPORT_KILLDATE_OFFSET);
QString endDateTimeSQL = "NULL";
if(killdate.isValid())
endDateTimeSQL = RDCheckDateTime(QDateTime(killdate,QTime(23,59,59)),
"yyyy-MM-dd hh:mm:ss");
sql=QString("select CUT_NAME,CUTS.START_DATETIME,CUTS.END_DATETIME ")+
"from CART left join CUTS on CART.NUMBER=CUTS.CART_NUMBER "+
"where (CART.GROUP_NAME=\""+RDEscapeString(dg_svc->autospotGroup())+"\")&&"
@ -443,7 +449,7 @@ bool MainWidget::CheckSpot(const QString &isci)
if(q->value(1).isNull()) {
sql+="START_DATETIME=\""+today.toString("yyyy-MM-dd")+" 00:00:00\",";
}
sql+="END_DATETIME=\""+RDCheckDateTime(killdate,"yyyy-MM-dd")+" 23:59:59\" ";
sql+="END_DATETIME="+endDateTimeSQL+" ";
sql+="where CUT_NAME=\""+q->value(0).toString()+"\"";
q1=new RDSqlQuery(sql);
delete q1;

View File

@ -1864,13 +1864,13 @@ void MainObject::WriteTimestampCache(const QString &filename,
sql=QString().sprintf("insert into DROPBOX_PATHS set \
DROPBOX_ID=%d,\
FILE_PATH=\"%s\",\
FILE_DATETIME=\"%s\"",
FILE_DATETIME=%s",
import_persistent_dropbox_id,
(const char *)RDEscapeString(filename),
(const char *)RDCheckDateTime(dt,"yyyy-MM-dd hh:mm:ss"));
}
else {
sql=QString().sprintf("update DROPBOX_PATHS set FILE_DATETIME=\"%s\" \
sql=QString().sprintf("update DROPBOX_PATHS set FILE_DATETIME=%s \
where (DROPBOX_ID=%d)&&(FILE_PATH=\"%s\")",
(const char *)RDCheckDateTime(dt,"yyyy-MM-dd hh:mm:ss"),
import_persistent_dropbox_id,

View File

@ -1310,7 +1310,7 @@ void MainObject::CommitCast()
ITEM_SOURCE_TEXT=\"%s\",\
ITEM_SOURCE_URL=\"%s\",\
SHELF_LIFE=%d,\
EFFECTIVE_DATETIME=\"%s\" \
EFFECTIVE_DATETIME=%s \
where ID=%d",
status,
(const char *)RDEscapeString(item_title),