2018-01-08 Fred Gleason <fredg@paravelsystems.com>

* Removed implicit ASCII casts from RDEventLine.
This commit is contained in:
Fred Gleason 2018-01-08 13:15:09 -05:00
parent 6db1e6ca5e
commit 012fbb80a4
2 changed files with 212 additions and 208 deletions

View File

@ -16561,3 +16561,5 @@
* Fixed bugs that broke the build under Windows. * Fixed bugs that broke the build under Windows.
2018-01-08 Fred Gleason <fredg@paravelsystems.com> 2018-01-08 Fred Gleason <fredg@paravelsystems.com>
* Fixed a bug that broke highlighting of evergreen cuts. * Fixed a bug that broke highlighting of evergreen cuts.
2018-01-08 Fred Gleason <fredg@paravelsystems.com>
* Removed implicit ASCII casts from RDEventLine.

View File

@ -2,7 +2,7 @@
// //
// Abstract a Rivendell Log Manager Event // Abstract a Rivendell Log Manager Event
// //
// (C) Copyright 2002-2006,2016 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2002-2006,2016-2018 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License version 2 as
@ -332,13 +332,28 @@ void RDEventLine::clear()
bool RDEventLine::load() bool RDEventLine::load()
{ {
QString sql=QString().sprintf("select PROPERTIES,PREPOSITION,TIME_TYPE,\ QString sql=QString("select ")+
GRACE_TIME,POST_POINT,USE_AUTOFILL,\ "PROPERTIES,"+ // 00
USE_TIMESCALE,IMPORT_SOURCE,START_SLOP,\ "PREPOSITION,"+ // 01
END_SLOP,FIRST_TRANS_TYPE,DEFAULT_TRANS_TYPE,\ "TIME_TYPE,"+ // 02
COLOR,AUTOFILL_SLOP,NESTED_EVENT,SCHED_GROUP,TITLE_SEP,HAVE_CODE,HAVE_CODE2 \ "GRACE_TIME,"+ // 03
from EVENTS where NAME=\"%s\"", "POST_POINT,"+ // 04
(const char *)event_name); "USE_AUTOFILL,"+ // 05
"USE_TIMESCALE,"+ // 06
"IMPORT_SOURCE,"+ // 07
"START_SLOP,"+ // 08
"END_SLOP,"+ // 09
"FIRST_TRANS_TYPE,"+ // 10
"DEFAULT_TRANS_TYPE,"+ // 11
"COLOR,"+ // 12
"AUTOFILL_SLOP,"+ // 13
"NESTED_EVENT,"+ // 14
"SCHED_GROUP,"+ // 15
"TITLE_SEP,"+ // 16
"HAVE_CODE,"+ // 17
"HAVE_CODE2 "+ // 18
"from EVENTS where "+
"NAME=\""+RDEscapeString(event_name)+"\"";
RDSqlQuery *q=new RDSqlQuery(sql); RDSqlQuery *q=new RDSqlQuery(sql);
if(!q->first()) { if(!q->first()) {
fprintf(stderr,"RDEventLine::load() EVENT NOT FOUND: %s\n", fprintf(stderr,"RDEventLine::load() EVENT NOT FOUND: %s\n",
@ -384,58 +399,47 @@ bool RDEventLine::save(RDConfig *config)
(const char *)event_name); (const char *)event_name);
RDSqlQuery *q=new RDSqlQuery(sql); RDSqlQuery *q=new RDSqlQuery(sql);
if(q->first()) { if(q->first()) {
sql=QString().sprintf("update EVENTS set PROPERTIES=\"%s\",\ sql=QString("update EVENTS set ")+
PREPOSITION=%d,TIME_TYPE=%d,\ "PROPERTIES=\""+RDEscapeString(event_properties)+"\","+
GRACE_TIME=%d,POST_POINT=\"%s\",\ QString().sprintf("PREPOSITION=%d,",event_preposition)+
USE_AUTOFILL=\"%s\",USE_TIMESCALE=\"%s\",\ QString().sprintf("TIME_TYPE=%d,",event_time_type)+
IMPORT_SOURCE=%d,START_SLOP=%d,\ QString().sprintf("GRACE_TIME=%d,",event_grace_time)+
END_SLOP=%d,FIRST_TRANS_TYPE=%d,\ "POST_POINT=\""+RDYesNo(event_post_point)+"\","+
DEFAULT_TRANS_TYPE=%d,COLOR=\"%s\"\ "USE_AUTOFILL=\""+RDYesNo(event_use_autofill)+"\","+
AUTOFILL_SLOP=%d,NESTED_EVENT=\"%s\",\ "USE_TIMESCALE=\""+RDYesNo(event_use_timescale)+"\","+
SCHED_GROUP=\"%s\",TITLE_SEP=%d,HAVE_CODE=\"%s\",HAVE_CODE2=\"%s\" \ QString().sprintf("IMPORT_SOURCE=%d,",event_import_source)+
where NAME=\"%s\"", QString().sprintf("START_SLOP=%d,",event_start_slop)+
(const char *)RDEscapeString(event_properties), QString().sprintf("END_SLOP=%d,",event_end_slop)+
event_preposition,event_time_type, QString().sprintf("FIRST_TRANS_TYPE=%d,",event_first_transtype)+
event_grace_time, QString().sprintf("DEFAULT_TRANS_TYPE=%d,",event_default_transtype)+
(const char *)RDYesNo(event_post_point), "COLOR=\""+RDEscapeString(event_color.name())+"\""+
(const char *)RDYesNo(event_use_autofill), QString().sprintf("AUTOFILL_SLOP=%d,",event_autofill_slop)+
(const char *)RDYesNo(event_use_timescale), "NESTED_EVENT=\""+RDEscapeString(event_nested_event)+"\","+
event_import_source,event_start_slop, "SCHED_GROUP=\""+RDEscapeString(event_sched_group)+"\","+
event_end_slop,event_first_transtype, QString().sprintf("TITLE_SEP=%d,",event_title_sep)+
event_default_transtype, "HAVE_CODE=\""+RDEscapeString(event_have_code)+"\","+
(const char *)event_color.name(), "HAVE_CODE2=\""+RDEscapeString(event_have_code2)+"\" "+
event_autofill_slop, "where NAME=\""+RDEscapeString(event_name)+"\"";
(const char *)RDEscapeString(event_nested_event),
(const char *)RDEscapeString(event_sched_group),
event_title_sep,
(const char*)event_have_code,
(const char*)event_have_code2,
(const char *)RDEscapeString(event_name));
} }
else { else {
sql=QString().sprintf("insert into EVENTS set NAME=\"%s\",\ sql=QString("insert into EVENTS set ")+
PROPERTIES=\"%s\",\ "NAME=\""+RDEscapeString(event_name)+"\","+
PREPOSITION=%d,TIME_TYPE=%d,\ "PROPERTIES=\""+RDEscapeString(event_properties)+"\","+
GRACE_TIME=%d,POST_POINT=\"%s\",\ QString().sprintf("PREPOSITION=%d,",event_preposition)+
USE_AUTOFILL=\"%s\",USE_TIMESCALE=\"%s\",\ QString().sprintf("TIME_TYPE=%d,",event_time_type)+
IMPORT_SOURCE=%d,START_SLOP=%d,\ QString().sprintf("GRACE_TIME=%d,",event_grace_time)+
END_SLOP=%d,FIRST_TRANS_TYPE=%d,\ "POST_POINT=\""+RDYesNo(event_post_point)+"\","+
DEFAULT_TRANS_TYPE=%d,COLOR=\"%s\"\ "USE_AUTOFILL=\""+RDYesNo(event_use_autofill)+"\","+
AUTOFILL_SLOP=%d,SCHED_GROUP=\"%s\" where NAME=\"%s\"", "USE_TIMESCALE=\""+RDYesNo(event_use_timescale)+"\","+
(const char *)RDEscapeString(event_name), QString().sprintf("IMPORT_SOURCE=%d,",event_import_source)+
(const char *)RDEscapeString(event_properties), QString().sprintf("START_SLOP=%d,",event_start_slop)+
event_preposition,event_time_type, QString().sprintf("END_SLOP=%d,",event_end_slop)+
event_grace_time, QString().sprintf("FIRST_TRANS_TYPE=%d,",event_first_transtype)+
(const char *)RDYesNo(event_post_point), QString().sprintf("DEFAULT_TRANS_TYPE=%d,",event_default_transtype)+
(const char *)RDYesNo(event_use_autofill), "COLOR=\""+RDEscapeString(event_color.name())+"\","+
(const char *)RDYesNo(event_use_timescale), QString().sprintf("AUTOFILL_SLOP=%d,",event_autofill_slop)+
event_import_source,event_start_slop, "SCHED_GROUP=\""+RDEscapeString(event_sched_group)+"\" where "+
event_end_slop,event_first_transtype, "NAME=\""+RDEscapeString(event_name)+"\"";
event_default_transtype,
(const char *)event_color.name(),
event_autofill_slop,
(const char *)RDEscapeString(event_sched_group),
(const char *)RDEscapeString(event_name));
} }
delete q; delete q;
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
@ -510,21 +514,19 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
// //
for(int i=0;i<event_preimport_log->size();i++) { for(int i=0;i<event_preimport_log->size();i++) {
if((logline=event_preimport_log->logLine(i))!=NULL) { if((logline=event_preimport_log->logLine(i))!=NULL) {
sql=QString().sprintf("insert into `%s_LOG` set ID=%d,COUNT=%d,TYPE=%d,\ sql=QString("insert into `")+logname+"_LOG` set "+
SOURCE=%d,START_TIME=%d,GRACE_TIME=%d,\ QString().sprintf("ID=%d,",count)+
CART_NUMBER=%u,TIME_TYPE=%d,POST_POINT=\"%s\",\ QString().sprintf("COUNT=%d,",count)+
TRANS_TYPE=%d,COMMENT=\"%s\",EVENT_LENGTH=%d", QString().sprintf("TYPE=%d,",logline->type())+
(const char *)logname,count,count, QString().sprintf("SOURCE=%d,",RDLogLine::Template)+
logline->type(), QString().sprintf("START_TIME=%d,",QTime().msecsTo(time))+
RDLogLine::Template, QString().sprintf("GRACE_TIME=%d,",grace_time)+
QTime().msecsTo(time), QString().sprintf("CART_NUMBER=%u,",logline->cartNumber())+
grace_time,logline->cartNumber(), QString().sprintf("TIME_TYPE=%d,",time_type)+
time_type, "POST_POINT=\""+RDYesNo(post_point)+"\","+
(const char *)RDYesNo(post_point), QString().sprintf("TRANS_TYPE=%d,",logline->transType())+
logline->transType(), "COMMENT=\""+RDEscapeString(logline->markerComment())+"\","+
(const char *) QString().sprintf("EVENT_LENGTH=%d",event_length);
RDEscapeString(logline->markerComment()),
event_length);
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
delete q; delete q;
count++; count++;
@ -562,26 +564,25 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
} }
QTime end_start_time=event_start_time.addMSecs(event_length); QTime end_start_time=event_start_time.addMSecs(event_length);
sql=QString().sprintf("insert into `%s_LOG` set ID=%d,COUNT=%d,TYPE=%d,\ sql=QString("insert into `")+logname+"_LOG` set "+
SOURCE=%d,START_TIME=%d,GRACE_TIME=%d,\ QString().sprintf("ID=%d,",count)+
TIME_TYPE=%d,POST_POINT=\"%s\",TRANS_TYPE=%d,\ QString().sprintf("COUNT=%d,",count)+
LINK_EVENT_NAME=\"%s\",LINK_START_TIME=%d,\ QString().sprintf("TYPE=%d,",link_type)+
LINK_LENGTH=%d,LINK_ID=%d,LINK_START_SLOP=%d,\ QString().sprintf("SOURCE=%d,",RDLogLine::Template)+
LINK_END_SLOP=%d,EVENT_LENGTH=%d", QString().sprintf("START_TIME=%d,",QTime().msecsTo(time))+
(const char *)logname,count,count, QString().sprintf("GRACE_TIME=%d,",grace_time)+
link_type,RDLogLine::Template, QString().sprintf("TIME_TYPE=%d,",time_type)+
QTime().msecsTo(time), "POST_POINT=\""+RDYesNo(post_point)+"\","+
grace_time, QString().sprintf("TRANS_TYPE=%d,",trans_type)+
time_type, "LINK_EVENT_NAME=\""+RDEscapeString(event_name)+"\","+
(const char *)RDYesNo(post_point), QString().sprintf("LINK_START_TIME=%d,",
trans_type, QTime().msecsTo(event_start_time))+
(const char *)RDEscapeString(event_name), QString().sprintf("LINK_LENGTH=%d,",
QTime().msecsTo(event_start_time), event_start_time.msecsTo(end_start_time))+
event_start_time.msecsTo(end_start_time), QString().sprintf("LINK_ID=%d,",link_id)+
link_id, QString().sprintf("LINK_START_SLOP=%d,",event_start_slop)+
event_start_slop, QString().sprintf("LINK_END_SLOP=%d,",event_end_slop)+
event_end_slop, QString().sprintf("EVENT_LENGTH=%d",event_length);
event_length);
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
delete q; delete q;
count++; count++;
@ -605,8 +606,12 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
time.addMSecs(postimport_length); time.addMSecs(postimport_length);
sql=QString().sprintf("select NUMBER,ARTIST,SCHED_CODES from CART where GROUP_NAME='%s'",(const char *)SchedGroup()); sql=QString("select ")+
"NUMBER,"+
"ARTIST,"+
"SCHED_CODES "+
"from CART where "+
"GROUP_NAME=\""+RDEscapeString(SchedGroup())+"\"";
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
if(q->size()>0) if(q->size()>0)
{ {
@ -630,7 +635,8 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
} }
delete q; delete q;
sql=QString().sprintf("SELECT SCHED_STACK_ID from %s_STACK order by SCHED_STACK_ID",(const char*)svcname_rp); sql=QString("select SCHED_STACK_ID from `")+svcname_rp+"_STACK` "+
"order by SCHED_STACK_ID";
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
if (q->last()) if (q->last())
{ {
@ -647,21 +653,18 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
// Add deconflicting rules here // Add deconflicting rules here
// Title separation // Title separation
schedCL->save(); schedCL->save();
sql=QString().sprintf("select CART from %s_STACK \ sql=QString("select CART from `")+svcname_rp+"_STACK` where "+
where SCHED_STACK_ID >= %d",(const char*)svcname_rp,(stackid-titlesep)); QString().sprintf("SCHED_STACK_ID >= %d",stackid-titlesep);
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
while (q->next()) while (q->next()) {
{ for(counter=0;counter<schedCL->getNumberOfItems();counter++) {
for(counter=0;counter<schedCL->getNumberOfItems();counter++) if(q->value(0).toUInt()==schedCL->getItemCartnumber(counter)) {
{
if(q->value(0).toUInt()==schedCL->getItemCartnumber(counter))
{
schedCL->removeItem(counter); schedCL->removeItem(counter);
counter--; counter--;
} }
} }
} }
delete q; delete q;
if(schedCL->getNumberOfItems()==0) if(schedCL->getNumberOfItems()==0)
*errors+=QString().sprintf("%s Rule broken: Title Separation\n",(const char *)time.toString("hh:mm:ss")); *errors+=QString().sprintf("%s Rule broken: Title Separation\n",(const char *)time.toString("hh:mm:ss"));
@ -669,66 +672,57 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
// Artist separation // Artist separation
schedCL->save(); schedCL->save();
sql=QString().sprintf("select ARTIST from %s_STACK \ sql=QString("select ARTIST from `")+svcname_rp+"_STACK` where "+
where SCHED_STACK_ID >= %d",(const char*)svcname_rp,(stackid-artistsep)); QString().sprintf("SCHED_STACK_ID >= %d",stackid-artistsep);
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
while (q->next()) {
while (q->next()) for(counter=0;counter<schedCL->getNumberOfItems();counter++) {
{ if(q->value(0).toString()==schedCL->getItemArtist(counter)) {
for(counter=0;counter<schedCL->getNumberOfItems();counter++)
{
if(q->value(0).toString()==schedCL->getItemArtist(counter))
{
schedCL->removeItem(counter); schedCL->removeItem(counter);
counter--; counter--;
} }
} }
} }
delete q; delete q;
if(schedCL->getNumberOfItems()==0) if(schedCL->getNumberOfItems()==0) {
*errors+=QString().sprintf("%s Rule broken: Artist Separation\n",(const char *)time.toString("hh:mm:ss")); *errors+=QString().sprintf("%s Rule broken: Artist Separation\n",(const char *)time.toString("hh:mm:ss"));
}
schedCL->restore(); schedCL->restore();
// Must have scheduler code // Must have scheduler code
if(event_have_code!="") if(event_have_code!="") {
{
schedCL->save(); schedCL->save();
for(counter=0;counter<schedCL->getNumberOfItems();counter++) for(counter=0;counter<schedCL->getNumberOfItems();counter++) {
{ if(!schedCL->itemHasCode(counter,event_have_code)) {
if(!schedCL->itemHasCode(counter,event_have_code))
{
schedCL->removeItem(counter); schedCL->removeItem(counter);
counter--; counter--;
} }
} }
if(schedCL->getNumberOfItems()==0) if(schedCL->getNumberOfItems()==0) {
*errors+=QString().sprintf("%s Rule broken: Must have code %s\n",(const char *)time.toString("hh:mm:ss"),(const char*)event_have_code); *errors+=QString().sprintf("%s Rule broken: Must have code %s\n",(const char *)time.toString("hh:mm:ss"),(const char*)event_have_code);
}
schedCL->restore(); schedCL->restore();
} }
// Must have second scheduler code // Must have second scheduler code
if(event_have_code2!="") if(event_have_code2!="") {
{
schedCL->save(); schedCL->save();
for(counter=0;counter<schedCL->getNumberOfItems();counter++) for(counter=0;counter<schedCL->getNumberOfItems();counter++) {
{ if(!schedCL->itemHasCode(counter,event_have_code2)) {
if(!schedCL->itemHasCode(counter,event_have_code2))
{
schedCL->removeItem(counter); schedCL->removeItem(counter);
counter--; counter--;
} }
} }
if(schedCL->getNumberOfItems()==0) if(schedCL->getNumberOfItems()==0) {
*errors+=QString().sprintf("%s Rule broken: Must have second code %s\n",(const char *)time.toString("hh:mm:ss"),(const char*)event_have_code2); *errors+=QString().sprintf("%s Rule broken: Must have second code %s\n",(const char *)time.toString("hh:mm:ss"),(const char*)event_have_code2);
}
schedCL->restore(); schedCL->restore();
} }
// Scheduler Codes // Scheduler Codes
sql=QString().sprintf("select CODE,MAX_ROW,MIN_WAIT,NOT_AFTER, OR_AFTER,OR_AFTER_II from %s_RULES",(const char *)clockname); sql=QString().sprintf("select CODE,MAX_ROW,MIN_WAIT,NOT_AFTER, OR_AFTER,OR_AFTER_II from %s_RULES",(const char *)clockname);
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
while (q->next()) while (q->next()) {
{
// max in a row, min wait // max in a row, min wait
schedCL->save(); schedCL->save();
int range=q->value(1).toInt()+q->value(2).toInt(); int range=q->value(1).toInt()+q->value(2).toInt();
@ -736,20 +730,24 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
QString wstr=q->value(0).toString(); QString wstr=q->value(0).toString();
wstr+=" "; wstr+=" ";
wstr=wstr.left(11); wstr=wstr.left(11);
sql=QString().sprintf("select CART from %s_STACK \ sql=QString("select CART from `")+svcname_rp+"_STACK` where "+
where SCHED_STACK_ID > %d and SCHED_CODES like \"%%%s%%\"",(const char*)svcname_rp,(stackid-range),(const char *)wstr); QString().sprintf("SCHED_STACK_ID > %d and ",stackid-range)+
"SCHED_CODES like \"%%"+RDEscapeString(wstr)+"%%\"";
q1=new RDSqlQuery(sql); q1=new RDSqlQuery(sql);
if (q1->size()>=allowed || allowed==0) if(q1->size()>=allowed || allowed==0) {
for(counter=0;counter<schedCL->getNumberOfItems();counter++) for(counter=0;counter<schedCL->getNumberOfItems();counter++) {
if ( schedCL->removeIfCode(counter,q->value(0).toString())) if(schedCL->removeIfCode(counter,q->value(0).toString())) {
counter--; counter--;
}
}
}
delete q1; delete q1;
if(schedCL->getNumberOfItems()==0) if(schedCL->getNumberOfItems()==0) {
*errors+=QString().sprintf("%s Rule broken: Max. in a Row/Min. Wait for %s\n",(const char *)time.toString("hh:mm:ss"),(const char *)q->value(0).toString()); *errors+=QString().sprintf("%s Rule broken: Max. in a Row/Min. Wait for %s\n",(const char *)time.toString("hh:mm:ss"),(const char *)q->value(0).toString());
}
schedCL->restore(); schedCL->restore();
// do not play after // do not play after
if (q->value(3).toString()!="") if(q->value(3).toString()!="") {
{
schedCL->save(); schedCL->save();
QString wstr=q->value(3).toString(); QString wstr=q->value(3).toString();
wstr+=" "; wstr+=" ";
@ -757,18 +755,21 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
sql=QString().sprintf("select CART from %s_STACK \ sql=QString().sprintf("select CART from %s_STACK \
where SCHED_STACK_ID = %d and SCHED_CODES like \"%%%s%%\"",(const char*)svcname_rp,(stackid-1),(const char *)wstr); where SCHED_STACK_ID = %d and SCHED_CODES like \"%%%s%%\"",(const char*)svcname_rp,(stackid-1),(const char *)wstr);
q1=new RDSqlQuery(sql); q1=new RDSqlQuery(sql);
if (q1->size()>0) if(q1->size()>0) {
for(counter=0;counter<schedCL->getNumberOfItems();counter++) for(counter=0;counter<schedCL->getNumberOfItems();counter++) {
if ( schedCL->removeIfCode(counter,q->value(0).toString())) if(schedCL->removeIfCode(counter,q->value(0).toString())) {
counter--; counter--;
}
}
}
delete q1; delete q1;
if(schedCL->getNumberOfItems()==0) if(schedCL->getNumberOfItems()==0) {
*errors+=QString().sprintf("%s Rule broken: Do not schedule %s after %s\n",(const char *)time.toString("hh:mm:ss"),(const char *)q->value(0).toString(),(const char *)q->value(3).toString()); *errors+=QString().sprintf("%s Rule broken: Do not schedule %s after %s\n",(const char *)time.toString("hh:mm:ss"),(const char *)q->value(0).toString(),(const char *)q->value(3).toString());
}
schedCL->restore(); schedCL->restore();
} }
// or after // or after
if (q->value(4).toString()!="") if (q->value(4).toString()!="") {
{
schedCL->save(); schedCL->save();
QString wstr=q->value(4).toString(); QString wstr=q->value(4).toString();
wstr+=" "; wstr+=" ";
@ -776,18 +777,21 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
sql=QString().sprintf("select CART from %s_STACK \ sql=QString().sprintf("select CART from %s_STACK \
where SCHED_STACK_ID = %d and SCHED_CODES like \"%%%s%%\"",(const char*)svcname_rp,(stackid-1),(const char *)wstr); where SCHED_STACK_ID = %d and SCHED_CODES like \"%%%s%%\"",(const char*)svcname_rp,(stackid-1),(const char *)wstr);
q1=new RDSqlQuery(sql); q1=new RDSqlQuery(sql);
if (q1->size()>0) if(q1->size()>0) {
for(counter=0;counter<schedCL->getNumberOfItems();counter++) for(counter=0;counter<schedCL->getNumberOfItems();counter++) {
if ( schedCL->removeIfCode(counter,q->value(0).toString())) if(schedCL->removeIfCode(counter,q->value(0).toString())) {
counter--; counter--;
}
}
}
delete q1; delete q1;
if(schedCL->getNumberOfItems()==0) if(schedCL->getNumberOfItems()==0) {
*errors+=QString().sprintf("%s Rule broken: Do not schedule %s after %s\n",(const char *)time.toString("hh:mm:ss"),(const char *)q->value(0).toString(),(const char *)q->value(4).toString()); *errors+=QString().sprintf("%s Rule broken: Do not schedule %s after %s\n",(const char *)time.toString("hh:mm:ss"),(const char *)q->value(0).toString(),(const char *)q->value(4).toString());
}
schedCL->restore(); schedCL->restore();
} }
// or after II // or after II
if (q->value(5).toString()!="") if (q->value(5).toString()!="") {
{
schedCL->save(); schedCL->save();
QString wstr=q->value(5).toString(); QString wstr=q->value(5).toString();
wstr+=" "; wstr+=" ";
@ -795,13 +799,17 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
sql=QString().sprintf("select CART from %s_STACK \ sql=QString().sprintf("select CART from %s_STACK \
where SCHED_STACK_ID = %d and SCHED_CODES like \"%%%s%%\"",(const char*)svcname_rp,(stackid-1),(const char *)wstr); where SCHED_STACK_ID = %d and SCHED_CODES like \"%%%s%%\"",(const char*)svcname_rp,(stackid-1),(const char *)wstr);
q1=new RDSqlQuery(sql); q1=new RDSqlQuery(sql);
if (q1->size()>0) if(q1->size()>0) {
for(counter=0;counter<schedCL->getNumberOfItems();counter++) for(counter=0;counter<schedCL->getNumberOfItems();counter++) {
if ( schedCL->removeIfCode(counter,q->value(0).toString())) if(schedCL->removeIfCode(counter,q->value(0).toString())) {
counter--; counter--;
}
}
}
delete q1; delete q1;
if(schedCL->getNumberOfItems()==0) if(schedCL->getNumberOfItems()==0) {
*errors+=QString().sprintf("%s Rule broken: Do not schedule %s after %s\n",(const char *)time.toString("hh:mm:ss"),(const char *)q->value(0).toString(),(const char *)q->value(5).toString()); *errors+=QString().sprintf("%s Rule broken: Do not schedule %s after %s\n",(const char *)time.toString("hh:mm:ss"),(const char *)q->value(0).toString(),(const char *)q->value(5).toString());
}
schedCL->restore(); schedCL->restore();
} }
} }
@ -810,34 +818,31 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
// end of deconflicting rules // end of deconflicting rules
int schedpos = rand()%schedCL->getNumberOfItems(); int schedpos=rand()%schedCL->getNumberOfItems();
sql=QString().sprintf("insert into `%s_LOG` set ID=%d,COUNT=%d,TYPE=%d,\ sql=QString("insert into `")+logname+"_LOG` set "+
SOURCE=%d,START_TIME=%d,GRACE_TIME=%d, \ QString().sprintf("ID=%d,",count)+
CART_NUMBER=%u,TIME_TYPE=%d,POST_POINT=\"%s\", \ QString().sprintf("COUNT=%d,",count)+
TRANS_TYPE=%d,EXT_START_TIME=%s,\ QString().sprintf("TYPE=%d,",RDLogLine::Cart)+
EVENT_LENGTH=%d", QString().sprintf("SOURCE=%d,",source)+
(const char *)logname,count,count, QString().sprintf("START_TIME=%d,",QTime().msecsTo(time))+
RDLogLine::Cart,source, QString().sprintf("GRACE_TIME=%d,",grace_time)+
QTime().msecsTo(time), QString().sprintf("CART_NUMBER=%u,",schedCL->getItemCartnumber(schedpos))+
grace_time, QString().sprintf("TIME_TYPE=%d,",time_type)+
schedCL->getItemCartnumber(schedpos), "POST_POINT=\""+RDYesNo(post_point)+"\","+
time_type, QString().sprintf("TRANS_TYPE=%d,",trans_type)+
(const char *)RDYesNo(post_point), "EXT_START_TIME="+RDCheckDateTime(time,"hh:mm:ss")+","+
trans_type, QString().sprintf("EVENT_LENGTH=%d",event_length);
(const char *)RDCheckDateTime(time,"hh:mm:ss"),
event_length);
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
delete q; delete q;
count++; count++;
sql=QString("insert into `")+svcname_rp+"_STACK` set "+
QString().sprintf("SCHED_STACK_ID=%u,",stackid)+
sql=QString().sprintf("insert into `%s_STACK` set SCHED_STACK_ID=%u,CART=%u,ARTIST=\"%s\",SCHED_CODES=\"%s\"",(const char*)svcname_rp, QString().sprintf("CART=%u,",schedCL->getItemCartnumber(schedpos))+
stackid,schedCL->getItemCartnumber(schedpos), "ARTIST=\""+RDEscapeString(schedCL->getItemArtist(schedpos))+"\","+
(const char *)RDEscapeString(schedCL->getItemArtist(schedpos)),(const char *)schedCL->getItemSchedCodes(schedpos)); "SCHED_CODES=\""+RDEscapeString(schedCL->getItemSchedCodes(schedpos))+
"\"";
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
delete q; delete q;
delete schedCL; delete schedCL;
@ -847,28 +852,25 @@ bool RDEventLine::generateLog(QString logname,const QString &svcname,
delete q; delete q;
} }
} }
// //
// Post-Import Carts // Post-Import Carts
// //
for(int i=0;i<event_postimport_log->size();i++) { for(int i=0;i<event_postimport_log->size();i++) {
if((logline=event_postimport_log->logLine(i))!=NULL) { if((logline=event_postimport_log->logLine(i))!=NULL) {
sql=QString().sprintf("insert into `%s_LOG` set ID=%d,COUNT=%d,TYPE=%d,\ sql=QString("insert into `")+logname+"_LOG` set "+
SOURCE=%d,START_TIME=%d,GRACE_TIME=%d,\ QString().sprintf("ID=%d,",count)+
CART_NUMBER=%u,TIME_TYPE=%d,POST_POINT=\"%s\",\ QString().sprintf("COUNT=%d,",count)+
TRANS_TYPE=%d,COMMENT=\"%s\",EVENT_LENGTH=%d", QString().sprintf("TYPE=%d,",logline->type())+
(const char *)logname,count,count, QString().sprintf("SOURCE=%d,",RDLogLine::Template)+
logline->type(), QString().sprintf("START_TIME=%d,",QTime().msecsTo(time))+
RDLogLine::Template, QString().sprintf("GRACE_TIME=%d,",grace_time)+
QTime().msecsTo(time), QString().sprintf("CART_NUMBER=%u,",logline->cartNumber())+
grace_time,logline->cartNumber(), QString().sprintf("TIME_TYPE=%d,",time_type)+
time_type, "POST_POINT=\""+RDYesNo(post_point)+"\","+
(const char *)RDYesNo(post_point), QString().sprintf("TRANS_TYPE=%d,",logline->transType())+
logline->transType(), "COMMENT=\""+RDEscapeString(logline->markerComment())+"\","+
(const char *) QString().sprintf("EVENT_LENGTH=%d",event_length);
RDEscapeString(logline->markerComment()),
event_length);
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
delete q; delete q;
count++; count++;
@ -1110,12 +1112,12 @@ bool RDEventLine::linkLog(RDLogEvent *e,int next_id,const QString &svcname,
// //
// Mark Events as Used // Mark Events as Used
// //
sql=QString().sprintf("update `%s` set EVENT_USED=\"Y\"\ sql=QString("update `")+import_table+"` set "+
where (START_HOUR=%d)&&(START_SECS>=%d)&&\ "EVENT_USED=\"Y\" where "+
(START_SECS<=%d)&&(EVENT_USED=\"N\")", QString().sprintf("(START_HOUR=%d)&&",start_start_hour)+
(const char *)import_table, QString().sprintf("(START_SECS>=%d)&&",start_start_secs/1000)+
start_start_hour,start_start_secs/1000, QString().sprintf("(START_SECS<=%d)&&",end_start_secs/1000)+
end_start_secs/1000); "(EVENT_USED=\"N\")";
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
delete q; delete q;
@ -1126,12 +1128,12 @@ bool RDEventLine::linkLog(RDLogEvent *e,int next_id,const QString &svcname,
addMSecs(link_logline->linkLength()); addMSecs(link_logline->linkLength());
if(event_use_autofill&&(event_start_time<=time)) { if(event_use_autofill&&(event_start_time<=time)) {
QTime fill_start_time=time; QTime fill_start_time=time;
sql=QString(). sql=QString("select AUTOFILLS.CART_NUMBER,CART.FORCED_LENGTH from ")+
sprintf("select AUTOFILLS.CART_NUMBER,CART.FORCED_LENGTH from\ "AUTOFILLS left join CART on AUTOFILLS.CART_NUMBER=CART.NUMBER where "+
AUTOFILLS left join CART on AUTOFILLS.CART_NUMBER=CART.NUMBER\ "(AUTOFILLS.SERVICE=\""+RDEscapeString(svcname)+"\")&&"+
where (AUTOFILLS.SERVICE=\"%s\")&&(CART.FORCED_LENGTH<=%d)&&\ QString().sprintf("(CART.FORCED_LENGTH<=%d)&&",time.msecsTo(end_time))+
(CART.FORCED_LENGTH>0) order by CART.FORCED_LENGTH desc", "(CART.FORCED_LENGTH>0) "+
(const char *)svcname,time.msecsTo(end_time)); "order by CART.FORCED_LENGTH desc";
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
bool fit=true; bool fit=true;
while(fit) { while(fit) {