diff --git a/ChangeLog b/ChangeLog index 03fe76d1..0b6d0dc0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -17117,3 +17117,5 @@ * Incremented the database version to 293. 2018-07-10 Fred Gleason * Cleaned up SQL quieries to ensure UTF-8 compatibility in caed(8). +2018-07-10 Fred Gleason + * Cleaned up SQL quieries in importersto ensure UTF-8 compatibility. diff --git a/importers/nexgen_filter.cpp b/importers/nexgen_filter.cpp index 71d1278d..0c97008b 100644 --- a/importers/nexgen_filter.cpp +++ b/importers/nexgen_filter.cpp @@ -387,9 +387,9 @@ void MainObject::ProcessXmlFile(const QString &xml,const QString &wavname, cart=new RDCart(cartnum); cart->setMetadata(&data); delete cart; - sql= - QString().sprintf("select CUT_NAME from CUTS where CART_NUMBER=%d",cartnum)+ - " order by ORIGIN_DATETIME desc"; + sql=QString("select CUT_NAME from CUTS where ")+ + QString().sprintf("CART_NUMBER=%d ",cartnum)+ + "order by ORIGIN_DATETIME desc"; q=new RDSqlQuery(sql); if(q->first()) { cut=new RDCut(q->value(0).toString()); diff --git a/importers/panel_copy.cpp b/importers/panel_copy.cpp index a2331005..a60b0b81 100644 --- a/importers/panel_copy.cpp +++ b/importers/panel_copy.cpp @@ -23,12 +23,14 @@ #include #include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include + +#include "panel_copy.h" MainObject::MainObject(QObject *parent) : QObject(parent) @@ -131,11 +133,10 @@ MainObject::MainObject(QObject *parent) // // Check Database Versions // - sql="select DB from VERSION"; + sql=QString("select DB from VERSION"); q=new RDSqlQuery(sql,src_db); if(!q->first()) { - fprintf(stderr, - "panel_copy: unable to read source database version\n"); + fprintf(stderr,"panel_copy: unable to read source database version\n"); exit(256); } if(q->value(0).toInt()!=RD_VERSION_DATABASE) { @@ -178,27 +179,27 @@ MainObject::MainObject(QObject *parent) // // Copy Entries // - sql="select TYPE,OWNER,PANEL_NO,ROW_NO,COLUMN_NO,LABEL,CART,DEFAULT_COLOR\ - from PANELS"; + sql=QString("select ")+ + "TYPE,"+ // 00 + "OWNER,"+ // 01 + "PANEL_NO,"+ // 02 + "ROW_NO,"+ // 03 + "COLUMN_NO,"+ // 04 + "LABEL,"+ // 05 + "CART,"+ // 06 + "DEFAULT_COLOR "+ // 07 + "from PANELS"; q=new RDSqlQuery(sql,src_db); while(q->next()) { - sql=QString().sprintf("insert into PANELS set \ - TYPE=%d,\ - OWNER=\"%s\",\ - PANEL_NO=%d,\ - ROW_NO=%d,\ - COLUMN_NO=%d,\ - LABEL=\"%s\",\ - CART=%d,\ - DEFAULT_COLOR=\"%s\"", - q->value(0).toInt(), - (const char *)q->value(1).toString(), - q->value(2).toInt(), - q->value(3).toInt(), - q->value(4).toInt(), - (const char *)q->value(5).toString(), - q->value(6).toInt(), - (const char *)q->value(7).toString()); + sql=QString("insert into PANELS set ")+ + QString().sprintf("TYPE=%d,",q->value(0).toInt())+ + "OWNER=\""+RDEscapeString(q->value(1).toString())+"\","+ + QString().sprintf("PANEL_NO=%d,",q->value(2).toInt())+ + QString().sprintf("ROW_NO=%d,",q->value(3).toInt())+ + QString().sprintf("COLUMN_NO=%d,",q->value(4).toInt())+ + "LABEL=\""+RDEscapeString(q->value(5).toString())+"\","+ + QString().sprintf("CART=%d,",q->value(6).toInt())+ + "DEFAULT_COLOR=\""+RDEscapeString(q->value(7).toString())+"\""; q1=new RDSqlQuery(sql,dest_db); delete q1; } diff --git a/importers/rdcatch_copy.cpp b/importers/rdcatch_copy.cpp index 52a49240..197ae400 100644 --- a/importers/rdcatch_copy.cpp +++ b/importers/rdcatch_copy.cpp @@ -2,7 +2,7 @@ // // An RDCatch event copier. // -// (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 @@ -24,11 +24,13 @@ #include -#include #include -#include +#include #include #include +#include + +#include "rdcatch_copy.h" MainObject::MainObject(QObject *parent) : QObject(parent) @@ -162,7 +164,7 @@ MainObject::MainObject(QObject *parent) // // Check Database Versions // - sql="select DB from VERSION"; + sql=QString("select DB from VERSION"); q=new RDSqlQuery(sql,src_db); if(!q->first()) { fprintf(stderr, @@ -190,8 +192,8 @@ MainObject::MainObject(QObject *parent) // // Check Rivendell Hosts // - sql=QString().sprintf("select NAME from STATIONS where NAME=\"%s\"", - (const char *)src_station); + sql=QString("select NAME from STATIONS where ")+ + "NAME=\""+RDEscapeString(src_station)+"\""; q=new RDSqlQuery(sql,src_db); if(!q->first()) { fprintf(stderr, @@ -200,8 +202,8 @@ MainObject::MainObject(QObject *parent) } delete q; - sql=QString().sprintf("select NAME from STATIONS where NAME=\"%s\"", - (const char *)dest_station); + sql=QString("select NAME from STATIONS where ")+ + "NAME=\""+RDEscapeString(dest_station)+"\""; q=new RDSqlQuery(sql,dest_db); if(!q->first()) { fprintf(stderr, @@ -225,96 +227,103 @@ MainObject::MainObject(QObject *parent) // // Delete current destination entries // - sql=QString().sprintf("delete from RECORDINGS where STATION_NAME\"%s\"", - (const char *)dest_station); + sql=QString("delete from RECORDINGS where ")+ + "STATION_NAME\""+RDEscapeString(dest_station)+"\""; q=new RDSqlQuery(sql,dest_db); delete q; // // Copy Entries // - sql=QString().sprintf("select IS_ACTIVE,TYPE,CHANNEL,CUT_NAME,SUN,MON,TUE,\ - WED,THU,FRI,SAT,DESCRIPTION,START_TYPE,START_TIME,\ - START_LENGTH,START_MATRIX,START_LINE,START_OFFSET,\ - END_TYPE,END_TIME,END_LENGTH,END_MATRIX,END_LINE,\ - LENGTH,TRIM_THRESHOLD,NORMALIZE_LEVEL,\ - STARTDATE_OFFSET,ENDDATE_OFFSET,FORMAT,CHANNELS,\ - SAMPRATE,BITRATE,QUALITY,MACRO_CART,SWITCH_INPUT,\ - SWITCH_OUTPUT,EXIT_CODE,ONE_SHOT,URL,URL_USERNAME,\ - URL_PASSWORD from RECORDINGS\ - where STATION_NAME=\"%s\"", - (const char *)src_station); + sql=QString("select ")+ + "IS_ACTIVE,"+ // 00 + "TYPE,"+ // 01 + "CHANNEL,"+ // 02 + "CUT_NAME,"+ // 03 + "SUN,"+ // 04 + "MON,"+ // 05 + "TUE,"+ // 06 + "WED,"+ // 07 + "THU,"+ // 08 + "FRI,"+ // 09 + "SAT,"+ // 10 + "DESCRIPTION,"+ // 11 + "START_TYPE,"+ // 12 + "START_TIME,"+ // 13 + "START_LENGTH,"+ // 14 + "START_MATRIX,"+ // 15 + "START_LINE,"+ // 16 + "START_OFFSET,"+ // 17 + "END_TYPE,"+ // 18 + "END_TIME,"+ // 19 + "END_LENGTH,"+ // 20 + "END_MATRIX,"+ // 21 + "END_LINE,"+ // 22 + "LENGTH,"+ // 23 + "TRIM_THRESHOLD,"+ // 24 + "NORMALIZE_LEVEL,"+ // 25 + "STARTDATE_OFFSET,"+ // 26 + "ENDDATE_OFFSET,"+ // 27 + "FORMAT,"+ // 28 + "CHANNELS,"+ // 29 + "SAMPRATE,"+ // 30 + "BITRATE,"+ // 31 + "QUALITY,"+ // 32 + "MACRO_CART,"+ // 33 + "SWITCH_INPUT,"+ // 34 + "SWITCH_OUTPUT,"+ // 35 + "EXIT_CODE,"+ // 36 + "ONE_SHOT,"+ // 37 + "URL,"+ // 38 + "URL_USERNAME,"+ // 39 + "URL_PASSWORD "+ // 40 + "from RECORDINGS where "+ + "STATION_NAME=\""+RDEscapeString(src_station)+"\""; q=new RDSqlQuery(sql,src_db); while(q->next()) { - sql=QString().sprintf("insert into RECORDINGS set IS_ACTIVE=\"%s\",\ - TYPE=%d,CHANNEL=%u,CUT_NAME=\"%s\",SUN=\"%s\",\ - MON=\"%s\",TUE=\"%s\",WED=\"%s\",THU=\"%s\",\ - FRI=\"%s\",SAT=\"%s\",DESCRIPTION=\"%s\",\ - START_TYPE=%d,START_TIME=\"%s\",START_LENGTH=%d,\ - START_MATRIX=%d,START_LINE=%d,START_OFFSET=%d,\ - END_TYPE=%d,END_TIME=\"%s\",END_LENGTH=%d,\ - END_MATRIX=%d,END_LINE=%d,LENGTH=%u,\ - TRIM_THRESHOLD=%d,NORMALIZE_LEVEL=%d,\ - STARTDATE_OFFSET=%u,ENDDATE_OFFSET=%u,FORMAT=%d,\ - CHANNELS=%d,SAMPRATE=%d,BITRATE=%d,QUALITY=%d,\ - MACRO_CART=%d,SWITCH_INPUT=%d,SWITCH_OUTPUT=%d,\ - EXIT_CODE=%d,ONE_SHOT=\"%s\",URL=\"%s\",\ - URL_USERNAME=\"%s\",URL_PASSWORD=\"%s\",\ - STATION_NAME=\"%s\"", - (const char *)q->value(0).toString(), - - q->value(1).toInt(),q->value(2).toUInt(), - (const char *)q->value(3).toString(), - (const char *)q->value(4).toString(), - - (const char *)q->value(5).toString(), - (const char *)q->value(6).toString(), - (const char *)q->value(7).toString(), - (const char *)q->value(8).toString(), - - (const char *)q->value(9).toString(), - (const char *)q->value(10).toString(), - (const char *)q->value(11).toString(), - - q->value(12).toInt(), - (const char *)q->value(13).toString(), - q->value(14).toInt(), - - q->value(15).toInt(), - q->value(16).toInt(), - q->value(17).toInt(), - - q->value(18).toInt(), - (const char *)q->value(19).toString(), - q->value(20).toInt(), - - q->value(21).toInt(), - q->value(22).toInt(), - q->value(23).toUInt(), - - q->value(24).toInt(), - q->value(25).toInt(), - - q->value(26).toUInt(), - q->value(27).toUInt(), - q->value(28).toInt(), - - q->value(29).toInt(), - q->value(30).toInt(), - q->value(31).toInt(), - q->value(32).toInt(), - - q->value(33).toInt(), - q->value(34).toInt(), - q->value(35).toInt(), - - q->value(36).toInt(), - (const char *)q->value(37).toString(), - (const char *)q->value(38).toString(), - - (const char *)q->value(39).toString(), - (const char *)q->value(40).toString(), - (const char *)dest_station); + sql=QString("insert into RECORDINGS set ")+ + ":IS_ACTIVE=\""+RDEscapeString(q->value(0).toString())+"\","+ + QString().sprintf("TYPE=%d,",q->value(1).toInt())+ + QString().sprintf("CHANNEL=%u,",q->value(2).toUInt())+ + "CUT_NAME=\""+RDEscapeString(q->value(3).toString())+"\","+ + "SUN=\""+RDEscapeString(q->value(4).toString())+"\","+ + "MON=\""+RDEscapeString(q->value(5).toString())+"\","+ + "TUE=\""+RDEscapeString(q->value(6).toString())+"\","+ + "WED=\""+RDEscapeString(q->value(7).toString())+"\","+ + "THU=\""+RDEscapeString(q->value(8).toString())+"\","+ + "FRI=\""+RDEscapeString(q->value(9).toString())+"\","+ + "SAT=\""+RDEscapeString(q->value(10).toString())+"\","+ + "DESCRIPTION=\""+RDEscapeString(q->value(11).toString())+"\","+ + QString().sprintf("START_TYPE=%d,",q->value(12).toInt())+ + "START_TIME=\""+RDEscapeString(q->value(13).toString())+"\","+ + QString().sprintf("START_LENGTH=%d,",q->value(14).toInt())+ + QString().sprintf("START_MATRIX=%d,",q->value(15).toInt())+ + QString().sprintf("START_LINE=%d,",q->value(16).toInt())+ + QString().sprintf("START_OFFSET=%d,",q->value(17).toInt())+ + QString().sprintf("END_TYPE=%d,",q->value(18).toInt())+ + "END_TIME=\""+RDEscapeString(q->value(19).toString())+"\","+ + QString().sprintf("END_LENGTH=%d,",q->value(20).toInt())+ + QString().sprintf("END_MATRIX=%d,",q->value(21).toInt())+ + QString().sprintf("END_LINE=%d,",q->value(22).toInt())+ + QString().sprintf("LENGTH=%u,",q->value(23).toUInt())+ + QString().sprintf("TRIM_THRESHOLD=%d,",q->value(24).toInt())+ + QString().sprintf("NORMALIZE_LEVEL=%d,",q->value(25).toInt())+ + QString().sprintf("STARTDATE_OFFSET=%u,",q->value(26).toUInt())+ + QString().sprintf("ENDDATE_OFFSET=%u,",q->value(27).toUInt())+ + QString().sprintf("FORMAT=%d,",q->value(28).toInt())+ + QString().sprintf("CHANNELS=%d,",q->value(29).toInt())+ + QString().sprintf("SAMPRATE=%d,",q->value(30).toInt())+ + QString().sprintf("BITRATE=%d,",q->value(31).toInt())+ + QString().sprintf("QUALITY=%d,",q->value(32).toInt())+ + QString().sprintf("MACRO_CART=%d,",q->value(33).toInt())+ + QString().sprintf("SWITCH_INPUT=%d,",q->value(34).toInt())+ + QString().sprintf("SWITCH_OUTPUT=%d,",q->value(35).toInt())+ + QString().sprintf("EXIT_CODE=%d,",q->value(36).toInt())+ + "ONE_SHOT=\""+RDEscapeString(q->value(37).toString())+"\","+ + "URL=\""+RDEscapeString(q->value(38).toString())+"\","+ + "URL_USERNAME=\""+RDEscapeString(q->value(39).toString())+"\","+ + "URL_PASSWORD=\""+RDEscapeString(q->value(40).toString())+"\","+ + "STATION_NAME=\""+RDEscapeString(dest_station)+"\""; q1=new RDSqlQuery(sql,dest_db); delete q1; } diff --git a/importers/rivendell_filter.cpp b/importers/rivendell_filter.cpp index eeb568d2..4977853e 100644 --- a/importers/rivendell_filter.cpp +++ b/importers/rivendell_filter.cpp @@ -251,8 +251,8 @@ MainObject::MainObject(QObject *parent) // // Validate Group // - sql=QString().sprintf("select NAME from GROUPS where NAME=\"%s\"", - (const char *)RDEscapeString(q->value(2).toString())); + sql=QString("select NAME from GROUPS where ")+ + "NAME=\""+RDEscapeString(q->value(2).toString())+"\""; q1=new QSqlQuery(sql,filter_db); if(q1->first()) { group=q->value(2).toString(); @@ -288,8 +288,7 @@ MainObject::MainObject(QObject *parent) owner="null"; } else { - owner=QString().sprintf("\"%s\"", - (const char *)RDEscapeString(q->value(26).toString())); + owner=QString("\"")+RDEscapeString(q->value(26).toString())+"\""; } sql=QString("insert into CART set ")+ QString().sprintf("NUMBER=%u,",q->value(0).toUInt())+ @@ -436,9 +435,7 @@ MainObject::MainObject(QObject *parent) "CUT_NAME=\""+RDEscapeString(q1->value(0).toString())+"\""; q2=new QSqlQuery(sql,filter_db); delete q2; - ok=RDCopy(QString().sprintf("%s%s.%s",(const char *)ext_audiodir, - (const char *)q1->value(0).toString(), - RD_AUDIO_EXTENSION), + ok=RDCopy(ext_audiodir+q1->value(0).toString()+"."+RD_AUDIO_EXTENSION, RDCut::pathName(q1->value(0).toString())); if(!ok) { printf("[WARNING -- NO AUDIO FOUND]..."); diff --git a/importers/sas_filter.cpp b/importers/sas_filter.cpp index 7a977871..82a93824 100644 --- a/importers/sas_filter.cpp +++ b/importers/sas_filter.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include "sas_filter.h" @@ -124,10 +125,9 @@ void MainObject::InjectLine(char *line) // // Initialize the SQL clause // - QString base_sql=QString().sprintf("insert into RECORDINGS set\ - STATION_NAME=\"%s\",CHANNEL=%d,", - (const char *)rda->config()->sasStation(), - rda->config()->sasMatrix()); + QString base_sql=QString("insert into RECORDINGS set ")+ + "STATION_NAME=\""+RDEscapeString(rda->config()->sasStation())+"\","+ + QString().sprintf("CHANNEL=%d,",rda->config()->sasMatrix()); // // Day of the week fields diff --git a/importers/wings_filter.cpp b/importers/wings_filter.cpp index 316d16f7..44b9ebae 100644 --- a/importers/wings_filter.cpp +++ b/importers/wings_filter.cpp @@ -202,15 +202,18 @@ bool MainObject::ImportCut(RDGroup *group,struct WingsRecord *rec, printf("Importing %s - %s to cart %u, group %s\n", rec->filename,rec->title,cartnum,(const char *)group->name()); - sql=QString().sprintf("insert into CART set NUMBER=%u,GROUP_NAME=\"%s\",\ - TITLE=\"%s\",ARTIST=\"%s\",ALBUM=\"%s\",\ - CUT_QUANTITY=1,TYPE=%d,FORCED_LENGTH=%u,\ - AVERAGE_LENGTH=%u,USER_DEFINED=\"%s.%s\"", - cartnum,(const char *)group->name(), - rec->title,rec->artist,rec->album, - RDCart::Audio,wavefile->getExtTimeLength(), - wavefile->getExtTimeLength(), - rec->filename,rec->extension); + sql=QString("insert into CART set ")+ + QString().sprintf("NUMBER=%u,",cartnum)+ + "GROUP_NAME=\""+RDEscapeString(group->name())+"\","+ + "TITLE=\""+RDEscapeString(rec->title)+"\","+ + "ARTIST=\""+RDEscapeString(rec->artist)+"\","+ + "ALBUM=\""+RDEscapeString(rec->album)+"\","+ + "CUT_QUANTITY=1,"+ + QString().sprintf("TYPE=%d,",RDCart::Audio)+ + QString().sprintf("FORCED_LENGTH=%u,",wavefile->getExtTimeLength())+ + QString().sprintf("AVERAGE_LENGTH=%u,",wavefile->getExtTimeLength())+ + "USER_DEFINED=\""+RDEscapeString(rec->filename)+"."+ + RDEscapeString(rec->extension)+"\""; q=new RDSqlQuery(sql); delete q; RDCut::create(cartnum,1);