-
commit 615ac9a108c4574000357f032b8132bfa048e738 (HEAD -> visible)
Author: David Engel <dengel@mythtv.org>
Date: Thu Oct 10 10:29:28 2019 -0500
First cut at channel.deleted.
diff --git a/mythtv/libs/libmyth/programinfo.cpp b/mythtv/libs/libmyth/programinfo.cpp
index 010603df83..29c3a74c68 100644
a
|
b
|
bool LoadFromProgram(ProgramList &destination, |
5481 | 5481 | // queries (no defaults.) |
5482 | 5482 | |
5483 | 5483 | if (!queryStr.contains("WHERE")) |
5484 | | queryStr += " WHERE visible != 0 "; |
| 5484 | queryStr += " WHERE deleted IS NULL AND visible != 0 "; |
5485 | 5485 | |
5486 | 5486 | // NOTE: Any GROUP BY clause with a LIMIT is slow, adding at least |
5487 | 5487 | // a couple of seconds to the query execution time |
-
diff --git a/mythtv/libs/libmythbase/mythversion.h b/mythtv/libs/libmythbase/mythversion.h
index 0f4d4bb64f..f2609dc245 100644
a
|
b
|
|
75 | 75 | * mythtv/bindings/php/MythBackend.php |
76 | 76 | */ |
77 | 77 | |
78 | | #define MYTH_DATABASE_VERSION "1352" |
| 78 | #define MYTH_DATABASE_VERSION "1353" |
79 | 79 | |
80 | 80 | |
81 | 81 | MBASE_PUBLIC const char *GetMythSourceVersion(); |
-
diff --git a/mythtv/libs/libmythprotoserver/requesthandler/fileserverhandler.cpp b/mythtv/libs/libmythprotoserver/requesthandler/fileserverhandler.cpp
index 39ba133438..3f47ee6a21 100644
a
|
b
|
QString FileServerHandler::LocalFilePath(const QString &path, |
75 | 75 | lpath = ""; |
76 | 76 | |
77 | 77 | MSqlQuery query(MSqlQuery::InitCon()); |
78 | | query.prepare("SELECT icon FROM channel WHERE icon LIKE :FILENAME ;"); |
| 78 | query.prepare("SELECT icon FROM channel " |
| 79 | "WHERE icon LIKE :FILENAME ;"); |
79 | 80 | query.bindValue(":FILENAME", QString("%/") + file); |
80 | 81 | |
81 | 82 | if (query.exec() && query.next()) |
-
diff --git a/mythtv/libs/libmythtv/channelutil.cpp b/mythtv/libs/libmythtv/channelutil.cpp
index 8eabaa8695..f41b641128 100644
a
|
b
|
uint ChannelUtil::GetMplexID(uint sourceid, const QString &channum) |
466 | 466 | query.prepare( |
467 | 467 | "SELECT mplexid " |
468 | 468 | "FROM channel " |
469 | | "WHERE sourceid = :SOURCEID AND " |
| 469 | "WHERE deleted IS NULL AND " |
| 470 | " sourceid = :SOURCEID AND " |
470 | 471 | " channum = :CHANNUM"); |
471 | 472 | |
472 | 473 | query.bindValue(":SOURCEID", sourceid); |
… |
… |
QString ChannelUtil::GetChannelValueStr(const QString &channel_field, |
955 | 956 | QString( |
956 | 957 | "SELECT channel.%1 " |
957 | 958 | "FROM channel " |
958 | | "WHERE channum = :CHANNUM AND " |
| 959 | "WHERE deleted IS NULL AND " |
| 960 | " channum = :CHANNUM AND " |
959 | 961 | " sourceid = :SOURCEID") |
960 | 962 | .arg(channel_field)); |
961 | 963 | |
… |
… |
static QStringList get_valid_recorder_list(const QString &channum) |
1059 | 1061 | "SELECT capturecard.cardid " |
1060 | 1062 | "FROM channel " |
1061 | 1063 | "LEFT JOIN capturecard ON channel.sourceid = capturecard.sourceid " |
1062 | | "WHERE channel.channum = :CHANNUM AND " |
| 1064 | "WHERE channel.deleted IS NULL AND " |
| 1065 | " channel.channum = :CHANNUM AND " |
1063 | 1066 | " capturecard.livetvorder > 0 " |
1064 | 1067 | "ORDER BY capturecard.livetvorder, capturecard.cardid"); |
1065 | 1068 | query.bindValue(":CHANNUM", channum); |
… |
… |
vector<uint> ChannelUtil::GetConflicting(const QString &channum, uint sourceid) |
1103 | 1106 | { |
1104 | 1107 | query.prepare( |
1105 | 1108 | "SELECT chanid from channel " |
1106 | | "WHERE sourceid = :SOURCEID AND " |
| 1109 | "WHERE deleted IS NULL AND " |
| 1110 | " sourceid = :SOURCEID AND " |
1107 | 1111 | " channum = :CHANNUM"); |
1108 | 1112 | query.bindValue(":SOURCEID", sourceid); |
1109 | 1113 | } |
… |
… |
vector<uint> ChannelUtil::GetConflicting(const QString &channum, uint sourceid) |
1111 | 1115 | { |
1112 | 1116 | query.prepare( |
1113 | 1117 | "SELECT chanid from channel " |
1114 | | "WHERE channum = :CHANNUM"); |
| 1118 | "WHERE deleted IS NULL AND " |
| 1119 | " channum = :CHANNUM"); |
1115 | 1120 | } |
1116 | 1121 | |
1117 | 1122 | query.bindValue(":CHANNUM", channum); |
… |
… |
QString ChannelUtil::GetDefaultAuthority(uint chanid) |
1183 | 1188 | "SELECT chanid, m.default_authority " |
1184 | 1189 | "FROM channel c " |
1185 | 1190 | "LEFT JOIN dtv_multiplex m " |
1186 | | "ON (c.mplexid = m.mplexid)"); |
| 1191 | "ON (c.mplexid = m.mplexid) " |
| 1192 | "WHERE deleted IS NULL"); |
1187 | 1193 | if (query.exec()) |
1188 | 1194 | { |
1189 | 1195 | while (query.next()) |
… |
… |
QString ChannelUtil::GetDefaultAuthority(uint chanid) |
1203 | 1209 | |
1204 | 1210 | query.prepare( |
1205 | 1211 | "SELECT chanid, default_authority " |
1206 | | "FROM channel"); |
| 1212 | "FROM channel " |
| 1213 | "WHERE deleted IS NULL"); |
1207 | 1214 | if (query.exec()) |
1208 | 1215 | { |
1209 | 1216 | while (query.next()) |
… |
… |
int ChannelUtil::GetChanID(int mplexid, int service_transport_id, |
1321 | 1328 | |
1322 | 1329 | // find a proper ATSC channel |
1323 | 1330 | query.prepare("SELECT chanid FROM channel,dtv_multiplex " |
1324 | | "WHERE channel.sourceid = :SOURCEID AND " |
| 1331 | "WHERE channel.deleted IS NULL AND " |
| 1332 | " channel.sourceid = :SOURCEID AND " |
1325 | 1333 | " atsc_major_chan = :MAJORCHAN AND " |
1326 | 1334 | " atsc_minor_chan = :MINORCHAN AND " |
1327 | 1335 | " dtv_multiplex.transportid = :TRANSPORTID AND " |
… |
… |
int ChannelUtil::GetChanID(int mplexid, int service_transport_id, |
1341 | 1349 | // Find manually inserted/edited channels in order of scariness. |
1342 | 1350 | // find renamed channel, where atsc is valid |
1343 | 1351 | query.prepare("SELECT chanid FROM channel " |
1344 | | "WHERE sourceid = :SOURCEID AND " |
| 1352 | "WHERE deleted IS NULL AND " |
| 1353 | "sourceid = :SOURCEID AND " |
1345 | 1354 | "atsc_major_chan = :MAJORCHAN AND " |
1346 | 1355 | "atsc_minor_chan = :MINORCHAN"); |
1347 | 1356 | |
… |
… |
int ChannelUtil::GetChanID(int mplexid, int service_transport_id, |
1354 | 1363 | |
1355 | 1364 | // find based on mpeg program number and mplexid alone |
1356 | 1365 | query.prepare("SELECT chanid FROM channel " |
1357 | | "WHERE sourceid = :SOURCEID AND " |
| 1366 | "WHERE deleted IS NULL AND " |
| 1367 | "sourceid = :SOURCEID AND " |
1358 | 1368 | "serviceID = :SERVICEID AND " |
1359 | 1369 | "mplexid = :MPLEXID"); |
1360 | 1370 | |
… |
… |
uint ChannelUtil::FindChannel(uint sourceid, const QString &freqid) |
1373 | 1383 | MSqlQuery query(MSqlQuery::InitCon()); |
1374 | 1384 | query.prepare("SELECT chanid " |
1375 | 1385 | "FROM channel " |
1376 | | "WHERE sourceid = :SOURCEID AND " |
| 1386 | "WHERE deleted IS NULL AND " |
| 1387 | " sourceid = :SOURCEID AND " |
1377 | 1388 | " freqid = :FREQID"); |
1378 | 1389 | |
1379 | 1390 | query.bindValue(":SOURCEID", sourceid); |
… |
… |
uint ChannelUtil::FindChannel(uint sourceid, const QString &freqid) |
1390 | 1401 | |
1391 | 1402 | static uint get_max_chanid(uint sourceid) |
1392 | 1403 | { |
1393 | | QString qstr = "SELECT MAX(chanid) FROM channel "; |
1394 | | qstr += (sourceid) ? "WHERE sourceid = :SOURCEID" : ""; |
| 1404 | QString qstr = |
| 1405 | "SELECT MAX(chanid) FROM channel "; |
| 1406 | if (sourceid) |
| 1407 | qstr += "AND sourceid = :SOURCEID"; |
1395 | 1408 | |
1396 | 1409 | MSqlQuery query(MSqlQuery::ChannelCon()); |
1397 | 1410 | query.prepare(qstr); |
… |
… |
bool ChannelUtil::DeleteChannel(uint channel_id) |
1754 | 1767 | { |
1755 | 1768 | MSqlQuery query(MSqlQuery::InitCon()); |
1756 | 1769 | query.prepare( |
1757 | | "DELETE FROM channel " |
| 1770 | "UPDATE channel " |
| 1771 | "SET deleted = NOW() " |
1758 | 1772 | "WHERE chanid = :ID"); |
1759 | 1773 | query.bindValue(":ID", channel_id); |
1760 | 1774 | |
… |
… |
bool ChannelUtil::GetATSCChannel(uint sourceid, const QString &channum, |
1847 | 1861 | query.prepare( |
1848 | 1862 | "SELECT atsc_major_chan, atsc_minor_chan " |
1849 | 1863 | "FROM channel " |
1850 | | "WHERE channum = :CHANNUM AND " |
| 1864 | "WHERE deleted IS NULL AND " |
| 1865 | " channum = :CHANNUM AND " |
1851 | 1866 | " sourceid = :SOURCEID"); |
1852 | 1867 | |
1853 | 1868 | query.bindValue(":SOURCEID", sourceid); |
… |
… |
bool ChannelUtil::GetChannelData( |
1898 | 1913 | " atsc_major_chan, atsc_minor_chan, serviceid, " |
1899 | 1914 | " chanid, visible " |
1900 | 1915 | "FROM channel, videosource " |
1901 | | "WHERE videosource.sourceid = channel.sourceid AND " |
| 1916 | "WHERE channel.deleted IS NULL AND " |
| 1917 | " videosource.sourceid = channel.sourceid AND " |
1902 | 1918 | " channum = :CHANNUM AND " |
1903 | 1919 | " channel.sourceid = :SOURCEID " |
1904 | 1920 | "ORDER BY channel.visible DESC, channel.chanid "); |
… |
… |
ChannelInfoList ChannelUtil::GetChannelsInternal( |
2055 | 2071 | " %1 JOIN capturecard ON capturecard.sourceid = channel.sourceid ") |
2056 | 2072 | .arg((include_disconnected) ? "LEFT" : ""); |
2057 | 2073 | |
2058 | | QString cond = " WHERE "; |
| 2074 | qstr += "WHERE deleted IS NULL "; |
2059 | 2075 | |
2060 | 2076 | if (sourceid) |
2061 | | { |
2062 | | qstr += QString("WHERE channel.sourceid='%1' ").arg(sourceid); |
2063 | | cond = " AND "; |
2064 | | } |
| 2077 | qstr += QString("AND channel.sourceid='%1' ").arg(sourceid); |
2065 | 2078 | |
2066 | 2079 | // Select only channels from the specified channel group |
2067 | 2080 | if (channel_groupid > 0) |
2068 | | { |
2069 | | qstr += QString("%1 channelgroup.grpid = '%2' ") |
2070 | | .arg(cond).arg(channel_groupid); |
2071 | | cond = " AND "; |
2072 | | } |
| 2081 | qstr += QString("AND channelgroup.grpid = '%1' ").arg(channel_groupid); |
2073 | 2082 | |
2074 | 2083 | if (visible_only) |
2075 | | { |
2076 | | qstr += QString("%1 visible=1 ").arg(cond); |
2077 | | cond = " AND "; |
2078 | | } |
| 2084 | qstr += QString("AND visible = 1 "); |
2079 | 2085 | |
2080 | 2086 | qstr += " GROUP BY chanid"; |
2081 | 2087 | |
… |
… |
vector<uint> ChannelUtil::GetChanIDs(int sourceid, bool onlyVisible) |
2129 | 2135 | { |
2130 | 2136 | MSqlQuery query(MSqlQuery::InitCon()); |
2131 | 2137 | |
2132 | | QString select = "SELECT chanid FROM channel "; |
| 2138 | QString select = "SELECT chanid FROM channel WHERE deleted IS NULL "; |
2133 | 2139 | // Yes, this a little ugly |
2134 | 2140 | if (onlyVisible || sourceid > 0) |
2135 | 2141 | { |
2136 | | select += "WHERE "; |
2137 | 2142 | if (onlyVisible) |
2138 | | select += "visible = 1 "; |
| 2143 | select += "AND visible = 1 "; |
2139 | 2144 | if (sourceid > 0) |
2140 | | { |
2141 | | if (onlyVisible) |
2142 | | select += "AND "; |
2143 | | select += "sourceid=" + QString::number(sourceid); |
2144 | | } |
| 2145 | select += "AND sourceid=" + QString::number(sourceid); |
2145 | 2146 | } |
2146 | 2147 | |
2147 | 2148 | vector<uint> list; |
2148 | | if (!query.exec(select)) |
| 2149 | query.prepare(select); |
| 2150 | if (!query.exec()) |
2149 | 2151 | { |
2150 | 2152 | MythDB::DBError("SourceUtil::GetChanIDs()", query); |
2151 | 2153 | return list; |
… |
… |
uint ChannelUtil::GetChannelCount(int sourceid) |
2256 | 2258 | QString select; |
2257 | 2259 | |
2258 | 2260 | |
2259 | | select = "SELECT chanid FROM channel"; |
| 2261 | select = "SELECT chanid FROM channel WHERE deleted IS NULL "; |
2260 | 2262 | if (sourceid >= 0) |
2261 | | select += " WHERE sourceid=" + QString::number(sourceid); |
| 2263 | select += "AND sourceid=" + QString::number(sourceid); |
2262 | 2264 | select += ';'; |
2263 | 2265 | |
2264 | 2266 | query.prepare(select); |
… |
… |
ChannelInfoList ChannelUtil::LoadChannels(uint startIndex, uint count, |
2429 | 2431 | sql += QString("%1 JOIN capturecard ON capturecard.sourceid = channel.sourceid ") |
2430 | 2432 | .arg(ignoreUntunable ? "INNER" : "LEFT"); |
2431 | 2433 | |
2432 | | QStringList cond; |
| 2434 | sql += "WHERE channel.deleted IS NULL "; |
2433 | 2435 | if (ignoreHidden) |
2434 | | cond << "channel.visible = :VISIBLE "; |
| 2436 | sql += "AND channel.visible = 1 "; |
2435 | 2437 | |
2436 | 2438 | if (channelGroupID > 0) |
2437 | | cond << "channelgroup.grpid = :CHANGROUPID "; |
| 2439 | sql += "AND channelgroup.grpid = :CHANGROUPID "; |
2438 | 2440 | |
2439 | 2441 | if (sourceID > 0) |
2440 | | cond << "channel.sourceid = :SOURCEID "; |
| 2442 | sql += "AND channel.sourceid = :SOURCEID "; |
2441 | 2443 | |
2442 | 2444 | if (liveTVOnly) |
2443 | | cond << "capturecard.livetvorder > 0 "; |
2444 | | |
2445 | | if (!cond.isEmpty()) |
2446 | | sql += QString("WHERE %1").arg(cond.join("AND ")); |
| 2445 | sql += "AND capturecard.livetvorder > 0 "; |
2447 | 2446 | |
2448 | 2447 | if (groupBy == kChanGroupByCallsign) |
2449 | 2448 | sql += "GROUP BY channel.callsign "; |
… |
… |
ChannelInfoList ChannelUtil::LoadChannels(uint startIndex, uint count, |
2481 | 2480 | |
2482 | 2481 | query.prepare(sql); |
2483 | 2482 | |
2484 | | if (ignoreHidden) |
2485 | | query.bindValue(":VISIBLE", 1); |
2486 | | |
2487 | 2483 | if (channelGroupID > 0) |
2488 | 2484 | query.bindValue(":CHANGROUPID", channelGroupID); |
2489 | 2485 | |
-
diff --git a/mythtv/libs/libmythtv/dbcheck.cpp b/mythtv/libs/libmythtv/dbcheck.cpp
index 67fa418f8e..d272a6dd96 100644
a
|
b
|
nullptr |
3462 | 3462 | return false; |
3463 | 3463 | } |
3464 | 3464 | |
| 3465 | if (dbver == "1352") |
| 3466 | { |
| 3467 | const char *updates[] = { |
| 3468 | "ALTER TABLE channel ADD COLUMN deleted TIMESTAMP NULL", |
| 3469 | nullptr |
| 3470 | }; |
| 3471 | if (!performActualUpdate(updates, "1353", dbver)) |
| 3472 | return false; |
| 3473 | } |
| 3474 | |
3465 | 3475 | return true; |
3466 | 3476 | } |
3467 | 3477 | |
-
diff --git a/mythtv/libs/libmythtv/dtvmultiplex.cpp b/mythtv/libs/libmythtv/dtvmultiplex.cpp
index 5cd092095b..aedfddc1bb 100644
a
|
b
|
bool ScanDTVTransport::FillFromDB(DTVTunerType type, uint mplexid) |
572 | 572 | " d.transportid, d.networkid, c.default_authority," |
573 | 573 | " c.service_type " |
574 | 574 | "FROM channel AS c, dtv_multiplex AS d " |
575 | | "WHERE c.mplexid = :MPLEXID AND" |
| 575 | "WHERE c.deleted IS NULL AND " |
| 576 | " c.mplexid = :MPLEXID AND" |
576 | 577 | " c.mplexid = d.mplexid"); |
577 | 578 | query.bindValue(":MPLEXID", mplexid); |
578 | 579 | |
-
diff --git a/mythtv/libs/libmythtv/eithelper.cpp b/mythtv/libs/libmythtv/eithelper.cpp
index ae60a23b65..9420ce3fb6 100644
a
|
b
|
static uint get_chan_id_from_db_atsc(uint sourceid, |
863 | 863 | query.prepare( |
864 | 864 | "SELECT chanid, useonairguide " |
865 | 865 | "FROM channel " |
866 | | "WHERE atsc_major_chan = :MAJORCHAN AND " |
| 866 | "WHERE deleted IS NULL AND " |
| 867 | " atsc_major_chan = :MAJORCHAN AND " |
867 | 868 | " atsc_minor_chan = :MINORCHAN AND " |
868 | 869 | " sourceid = :SOURCEID"); |
869 | 870 | query.bindValue(":MAJORCHAN", atsc_major); |
… |
… |
static uint get_chan_id_from_db_dvb(uint sourceid, uint serviceid, |
893 | 894 | QString qstr = |
894 | 895 | "SELECT chanid, useonairguide, channel.sourceid " |
895 | 896 | "FROM channel, dtv_multiplex " |
896 | | "WHERE serviceid = :SERVICEID AND " |
| 897 | "WHERE deleted IS NULL AND " |
| 898 | " serviceid = :SERVICEID AND " |
897 | 899 | " networkid = :NETWORKID AND " |
898 | 900 | " transportid = :TRANSPORTID AND " |
899 | 901 | " channel.mplexid = dtv_multiplex.mplexid"; |
… |
… |
static uint get_chan_id_from_db_dvb(uint sourceid, uint serviceid, |
912 | 914 | qstr = |
913 | 915 | "SELECT chanid, useonairguide, channel.sourceid " |
914 | 916 | "FROM channel, dtv_multiplex " |
915 | | "WHERE serviceid = :SERVICEID AND " |
| 917 | "WHERE deleted IS NULL AND " |
| 918 | " serviceid = :SERVICEID AND " |
916 | 919 | " networkid = :NETWORKID AND " |
917 | 920 | " channel.mplexid = dtv_multiplex.mplexid"; |
918 | 921 | |
… |
… |
static uint get_chan_id_from_db_dtv(uint sourceid, uint serviceid, |
962 | 965 | QString qstr = |
963 | 966 | "SELECT c1.chanid, c1.useonairguide, c1.sourceid " |
964 | 967 | "FROM channel c1, dtv_multiplex m, channel c2 " |
965 | | "WHERE c1.serviceid = :SERVICEID AND " |
| 968 | "WHERE c1.deleted IS NULL AND " |
| 969 | " c1.serviceid = :SERVICEID AND " |
966 | 970 | " c1.mplexid = m.mplexid AND " |
967 | 971 | " m.mplexid = c2.mplexid AND " |
968 | 972 | " c2.chanid = :CHANID"; |
-
diff --git a/mythtv/libs/libmythtv/eitscanner.cpp b/mythtv/libs/libmythtv/eitscanner.cpp
index 4f9553f66e..817b168946 100644
a
|
b
|
void EITScanner::StartActiveScan(TVRec *_rec, uint max_seconds_per_source) |
242 | 242 | query.prepare( |
243 | 243 | "SELECT channum, MIN(chanid) " |
244 | 244 | "FROM channel, capturecard, videosource " |
245 | | "WHERE capturecard.sourceid = channel.sourceid AND " |
| 245 | "WHERE deleted IS NULL AND " |
| 246 | " capturecard.sourceid = channel.sourceid AND " |
246 | 247 | " videosource.sourceid = channel.sourceid AND " |
247 | 248 | " channel.mplexid IS NOT NULL AND " |
248 | 249 | " visible = 1 AND " |
-
diff --git a/mythtv/libs/libmythtv/mhi.cpp b/mythtv/libs/libmythtv/mhi.cpp
index 900fd2260e..abf18ac5cb 100644
a
|
b
|
bool MHIContext::LoadChannelCache() |
881 | 881 | query.prepare( |
882 | 882 | "SELECT networkid, serviceid, transportid, chanid " |
883 | 883 | "FROM channel, dtv_multiplex " |
884 | | "WHERE channel.mplexid = dtv_multiplex.mplexid " |
| 884 | "WHERE channel.deleted IS NULL " |
| 885 | " AND channel.mplexid = dtv_multiplex.mplexid " |
885 | 886 | " AND channel.sourceid = dtv_multiplex.sourceid " |
886 | 887 | " AND channel.sourceid = :SOURCEID ;" ); |
887 | 888 | query.bindValue(":SOURCEID", m_currentSource); |
… |
… |
int MHIContext::GetChannelIndex(const QString &str) |
963 | 964 | MSqlQuery query(MSqlQuery::InitCon()); |
964 | 965 | query.prepare("SELECT chanid " |
965 | 966 | "FROM channel " |
966 | | "WHERE channum = :CHAN AND " |
| 967 | "WHERE deleted IS NULL AND " |
| 968 | " channum = :CHAN AND " |
967 | 969 | " channel.sourceid = :SOURCEID"); |
968 | 970 | query.bindValue(":CHAN", channelNo); |
969 | 971 | query.bindValue(":SOURCEID", m_currentSource); |
-
diff --git a/mythtv/libs/libmythtv/programdata.cpp b/mythtv/libs/libmythtv/programdata.cpp
index 3740083bb6..55977a0e57 100644
a
|
b
|
void ProgramData::HandlePrograms( |
1474 | 1474 | query.prepare( |
1475 | 1475 | "SELECT chanid " |
1476 | 1476 | "FROM channel " |
1477 | | "WHERE sourceid = :ID AND " |
| 1477 | "WHERE deleted IS NULL AND " |
| 1478 | " sourceid = :ID AND " |
1478 | 1479 | " xmltvid = :XMLTVID"); |
1479 | 1480 | query.bindValue(":ID", sourceid); |
1480 | 1481 | query.bindValue(":XMLTVID", mapiter.key()); |
-
diff --git a/mythtv/libs/libmythtv/recorders/channelbase.cpp b/mythtv/libs/libmythtv/recorders/channelbase.cpp
index ebfde88120..a5b830e908 100644
a
|
b
|
int ChannelBase::GetChanID(void) const |
492 | 492 | MSqlQuery query(MSqlQuery::InitCon()); |
493 | 493 | |
494 | 494 | query.prepare("SELECT chanid,visible FROM channel " |
495 | | "WHERE channum = :CHANNUM AND " |
| 495 | "WHERE deleted IS NULL AND " |
| 496 | " channum = :CHANNUM AND " |
496 | 497 | " sourceid = :SOURCEID"); |
497 | 498 | query.bindValueNoNull(":CHANNUM", m_curchannelname); |
498 | 499 | query.bindValue(":SOURCEID", m_sourceid); |
… |
… |
bool ChannelBase::CheckChannel(const QString &channum) const |
660 | 661 | query.prepare( |
661 | 662 | "SELECT channel.chanid " |
662 | 663 | "FROM channel, capturecard " |
663 | | "WHERE channel.channum = :CHANNUM AND " |
| 664 | "WHERE channel.deleted IS NULL AND " |
| 665 | " channel.channum = :CHANNUM AND " |
664 | 666 | " channel.sourceid = capturecard.sourceid AND " |
665 | 667 | " capturecard.cardid = :INPUTID AND " |
666 | 668 | " capturecard.hostname = :HOSTNAME"); |
-
diff --git a/mythtv/libs/libmythtv/recorders/dvbchannel.cpp b/mythtv/libs/libmythtv/recorders/dvbchannel.cpp
index 94d1577930..f6bfd27946 100644
a
|
b
|
int DVBChannel::GetChanID() const |
959 | 959 | |
960 | 960 | query.prepare("SELECT chanid,visible " |
961 | 961 | "FROM channel, capturecard " |
962 | | "WHERE capturecard.sourceid = channel.sourceid AND " |
| 962 | "WHERE channel.deleted IS NULL AND " |
| 963 | " capturecard.sourceid = channel.sourceid AND " |
963 | 964 | " channel.channum = :CHANNUM AND " |
964 | 965 | " capturecard.cardid = :INPUTID"); |
965 | 966 | |
-
diff --git a/mythtv/libs/libmythtv/recorders/v4lchannel.cpp b/mythtv/libs/libmythtv/recorders/v4lchannel.cpp
index 4462e19232..3a2ca73ce5 100644
a
|
b
|
QString V4LChannel::GetFormatForChannel(const QString& channum, const QString& i |
481 | 481 | query.prepare( |
482 | 482 | "SELECT tvformat " |
483 | 483 | "FROM channel, capturecard " |
484 | | "WHERE channum = :CHANNUM AND " |
| 484 | "WHERE deleted IS NULL AND " |
| 485 | " channum = :CHANNUM AND " |
485 | 486 | " inputname = :INPUTNAME AND " |
486 | 487 | " capturecard.cardid = :INPUTID AND " |
487 | 488 | " capturecard.sourceid = channel.sourceid"); |
-
diff --git a/mythtv/libs/libmythtv/sourceutil.cpp b/mythtv/libs/libmythtv/sourceutil.cpp
index 5313c53913..24b2442ae9 100644
a
|
b
|
bool SourceUtil::HasDigitalChannel(uint sourceid) |
18 | 18 | query.prepare( |
19 | 19 | "SELECT mplexid, atsc_minor_chan, serviceid " |
20 | 20 | "FROM channel " |
21 | | "WHERE sourceid = :SOURCEID"); |
| 21 | "WHERE deleted IS NULL AND " |
| 22 | " sourceid = :SOURCEID"); |
22 | 23 | query.bindValue(":SOURCEID", sourceid); |
23 | 24 | |
24 | 25 | if (!query.exec()) |
… |
… |
QString SourceUtil::GetChannelSeparator(uint sourceid) |
69 | 70 | MSqlQuery query(MSqlQuery::InitCon()); |
70 | 71 | query.prepare("SELECT channum " |
71 | 72 | "FROM channel " |
72 | | "WHERE sourceid = :SOURCEID"); |
| 73 | "WHERE deleted IS NULL AND " |
| 74 | " sourceid = :SOURCEID"); |
73 | 75 | query.bindValue(":SOURCEID", sourceid); |
74 | 76 | |
75 | 77 | if (query.exec() && query.isActive() && query.size() > 0) |
… |
… |
uint SourceUtil::GetChannelCount(uint sourceid) |
111 | 113 | MSqlQuery query(MSqlQuery::InitCon()); |
112 | 114 | query.prepare("SELECT sum(1) " |
113 | 115 | "FROM channel " |
114 | | "WHERE sourceid = :SOURCEID"); |
| 116 | "WHERE deleted IS NULL AND " |
| 117 | " sourceid = :SOURCEID"); |
115 | 118 | query.bindValue(":SOURCEID", sourceid); |
116 | 119 | if (query.exec() && query.isActive() && query.next()) |
117 | 120 | return query.value(0).toUInt(); |
… |
… |
bool SourceUtil::IsEncoder(uint sourceid, bool strict) |
296 | 299 | query.prepare( |
297 | 300 | "SELECT atsc_minor_chan, serviceid " |
298 | 301 | "FROM channel " |
299 | | "WHERE sourceid = :SOURCEID"); |
| 302 | "WHERE deleted IS NULL AND " |
| 303 | " sourceid = :SOURCEID"); |
300 | 304 | query.bindValue(":SOURCEID", sourceid); |
301 | 305 | |
302 | 306 | bool has_any_chan = false; |
… |
… |
bool SourceUtil::DeleteSource(uint sourceid) |
490 | 494 | MSqlQuery query(MSqlQuery::InitCon()); |
491 | 495 | |
492 | 496 | // Delete the channels associated with the source |
493 | | query.prepare("DELETE FROM channel " |
494 | | "WHERE sourceid = :SOURCEID"); |
| 497 | query.prepare("UPDATE channel " |
| 498 | "SET deleted = NOW() " |
| 499 | "WHERE deleted IS NULL AND " |
| 500 | " sourceid = :SOURCEID"); |
495 | 501 | query.bindValue(":SOURCEID", sourceid); |
496 | 502 | |
497 | 503 | if (!query.exec() || !query.isActive()) |
… |
… |
bool SourceUtil::DeleteSource(uint sourceid) |
500 | 506 | return false; |
501 | 507 | } |
502 | 508 | |
503 | | // Delete the multiplexes associated with the source |
504 | | query.prepare("DELETE FROM dtv_multiplex " |
505 | | "WHERE sourceid = :SOURCEID"); |
506 | | query.bindValue(":SOURCEID", sourceid); |
507 | | |
508 | | if (!query.exec() || !query.isActive()) |
509 | | { |
510 | | MythDB::DBError("Deleting Multiplexes", query); |
511 | | return false; |
512 | | } |
513 | | |
514 | 509 | // Detach the inputs associated with the source |
515 | 510 | query.prepare("UPDATE capturecard " |
516 | 511 | "SET sourceid = 0 " |
-
diff --git a/mythtv/libs/libmythtv/transporteditor.cpp b/mythtv/libs/libmythtv/transporteditor.cpp
index 40ff3582be..c4291a830c 100644
a
|
b
|
void TransportListEditor::Delete(TransportSetting *transport) |
316 | 316 | if (!query.exec() || !query.isActive()) |
317 | 317 | MythDB::DBError("TransportEditor -- delete multiplex", query); |
318 | 318 | |
319 | | query.prepare("DELETE FROM channel WHERE mplexid = :MPLEXID"); |
| 319 | query.prepare("UPDATE channel SET deleted = NOW() " |
| 320 | "WHERE deleted IS NULL AND mplexid = :MPLEXID"); |
320 | 321 | query.bindValue(":MPLEXID", mplexid); |
321 | 322 | |
322 | 323 | if (!query.exec() || !query.isActive()) |
-
diff --git a/mythtv/libs/libmythtv/tv_rec.cpp b/mythtv/libs/libmythtv/tv_rec.cpp
index 1c9639f7b4..2706e233be 100644
a
|
b
|
QString TVRec::GetStartChannel(uint inputid) |
1745 | 1745 | query.prepare( |
1746 | 1746 | "SELECT channum " |
1747 | 1747 | "FROM capturecard, channel " |
1748 | | "WHERE channel.sourceid = capturecard.sourceid AND " |
| 1748 | "WHERE deleted IS NULL AND " |
| 1749 | " channel.sourceid = capturecard.sourceid AND " |
1749 | 1750 | " capturecard.cardid = :INPUTID"); |
1750 | 1751 | query.bindValue(":INPUTID", inputid); |
1751 | 1752 | |
… |
… |
QString TVRec::GetStartChannel(uint inputid) |
1769 | 1770 | query.prepare( |
1770 | 1771 | "SELECT channum, inputname " |
1771 | 1772 | "FROM capturecard, channel " |
1772 | | "WHERE channel.sourceid = capturecard.sourceid AND " |
| 1773 | "WHERE deleted IS NULL AND " |
| 1774 | " channel.sourceid = capturecard.sourceid AND " |
1773 | 1775 | " capturecard.cardid = :INPUTID"); |
1774 | 1776 | query.bindValue(":INPUTID", inputid); |
1775 | 1777 | |
… |
… |
bool TVRec::ShouldSwitchToAnotherInput(const QString& chanid) |
2197 | 2199 | query.prepare( |
2198 | 2200 | "SELECT channel.channum " |
2199 | 2201 | "FROM channel, capturecard " |
2200 | | "WHERE ( channel.chanid = :CHANID OR " |
| 2202 | "WHERE deleted IS NULL AND " |
| 2203 | " ( channel.chanid = :CHANID OR " |
2201 | 2204 | " ( channel.channum = :CHANNUM AND " |
2202 | 2205 | " channel.callsign = :CALLSIGN ) " |
2203 | 2206 | " ) AND " |
… |
… |
bool TVRec::ShouldSwitchToAnotherInput(const QString& chanid) |
2223 | 2226 | query.prepare( |
2224 | 2227 | "SELECT channel.channum, capturecard.cardid " |
2225 | 2228 | "FROM channel, capturecard " |
2226 | | "WHERE ( channel.chanid = :CHANID OR " |
| 2229 | "WHERE deleted IS NULL AND " |
| 2230 | " ( channel.chanid = :CHANID OR " |
2227 | 2231 | " ( channel.channum = :CHANNUM AND " |
2228 | 2232 | " channel.callsign = :CALLSIGN ) " |
2229 | 2233 | " ) AND " |
… |
… |
bool TVRec::CheckChannelPrefix(const QString &prefix, |
2323 | 2327 | QString basequery = QString( |
2324 | 2328 | "SELECT channel.chanid, channel.channum, capturecard.cardid " |
2325 | 2329 | "FROM channel, capturecard " |
2326 | | "WHERE channel.channum LIKE '%1%' AND " |
| 2330 | "WHERE deleted IS NULL AND " |
| 2331 | " channel.channum LIKE '%1%' AND " |
2327 | 2332 | " channel.sourceid = capturecard.sourceid"); |
2328 | 2333 | |
2329 | 2334 | QString inputquery[2] = |
-
diff --git a/mythtv/programs/mythbackend/backendhousekeeper.cpp b/mythtv/programs/mythbackend/backendhousekeeper.cpp
index 526d34902d..082c962dc6 100644
a
|
b
|
bool CleanupTask::DoRun(void) |
115 | 115 | CleanupInUsePrograms(); |
116 | 116 | CleanupOrphanedLiveTV(); |
117 | 117 | CleanupRecordedTables(); |
| 118 | CleanupChannelTables(); |
118 | 119 | CleanupProgramListings(); |
119 | 120 | return true; |
120 | 121 | } |
… |
… |
void CleanupTask::CleanupRecordedTables(void) |
277 | 278 | "(deleting temporary table)", query); |
278 | 279 | } |
279 | 280 | |
| 281 | void CleanupTask::CleanupChannelTables(void) |
| 282 | { |
| 283 | MSqlQuery query(MSqlQuery::InitCon()); |
| 284 | MSqlQuery deleteQuery(MSqlQuery::InitCon()); |
| 285 | |
| 286 | query.prepare(QString("DELETE channel " |
| 287 | "FROM channel " |
| 288 | "LEFT JOIN recorded r " |
| 289 | " ON r.chanid = channel.chanid " |
| 290 | "LEFT JOIN oldrecorded o " |
| 291 | " ON o.chanid = channel.chanid " |
| 292 | "WHERE channel.deleted IS NOT NULL " |
| 293 | " AND channel.deleted < " |
| 294 | " DATE_SUB(NOW(), INTERVAL 1 DAY) " |
| 295 | " AND r.chanid IS NULL " |
| 296 | " AND o.chanid IS NULL")); |
| 297 | if (!query.exec()) |
| 298 | MythDB::DBError("CleanupTask::CleanupChannelTables " |
| 299 | "(channel table)", query); |
| 300 | |
| 301 | query.prepare(QString("DELETE dtv_multiplex " |
| 302 | "FROM dtv_multiplex " |
| 303 | "LEFT JOIN channel c " |
| 304 | " ON c.mplexid = dtv_multiplex.mplexid " |
| 305 | "WHERE c.chanid IS NULL")); |
| 306 | if (!query.exec()) |
| 307 | MythDB::DBError("CleanupTask::CleanupChannelTables " |
| 308 | "(dtv_multiplex table)", query); |
| 309 | } |
| 310 | |
280 | 311 | void CleanupTask::CleanupProgramListings(void) |
281 | 312 | { |
282 | 313 | MSqlQuery query(MSqlQuery::InitCon()); |
-
diff --git a/mythtv/programs/mythbackend/backendhousekeeper.h b/mythtv/programs/mythbackend/backendhousekeeper.h
index 59dc8a476b..b48a54e4be 100644
a
|
b
|
class CleanupTask : public DailyHouseKeeperTask |
23 | 23 | void CleanupInUsePrograms(void); |
24 | 24 | void CleanupOrphanedLiveTV(void); |
25 | 25 | void CleanupRecordedTables(void); |
| 26 | void CleanupChannelTables(void); |
26 | 27 | void CleanupProgramListings(void); |
27 | 28 | }; |
28 | 29 | |
-
diff --git a/mythtv/programs/mythbackend/mainserver.cpp b/mythtv/programs/mythbackend/mainserver.cpp
index a9b044217e..002f18f4bb 100644
a
|
b
|
QString MainServer::LocalFilePath(const QString &path, const QString &wantgroup) |
8090 | 8090 | lpath = ""; |
8091 | 8091 | |
8092 | 8092 | MSqlQuery query(MSqlQuery::InitCon()); |
8093 | | query.prepare("SELECT icon FROM channel WHERE icon LIKE :FILENAME ;"); |
| 8093 | query.prepare("SELECT icon FROM channel " |
| 8094 | "WHERE deleted IS NULL AND icon LIKE :FILENAME ;"); |
8094 | 8095 | query.bindValue(":FILENAME", QString("%/") + file); |
8095 | 8096 | |
8096 | 8097 | if (query.exec() && query.next()) |
-
diff --git a/mythtv/programs/mythbackend/scheduler.cpp b/mythtv/programs/mythbackend/scheduler.cpp
index c65c6a3f34..659e6f319f 100644
a
|
b
|
void Scheduler::UpdateManuals(uint recordid) |
3721 | 3721 | query.value(6).toTime(), Qt::UTC)); |
3722 | 3722 | |
3723 | 3723 | query.prepare("SELECT chanid from channel " |
3724 | | "WHERE callsign = :STATION"); |
| 3724 | "WHERE deleted IS NULL AND callsign = :STATION"); |
3725 | 3725 | query.bindValue(":STATION", station); |
3726 | 3726 | if (!query.exec()) |
3727 | 3727 | { |
… |
… |
void Scheduler::UpdateMatches(uint recordid, uint sourceid, uint mplexid, |
4078 | 4078 | "FROM (RECTABLE, program INNER JOIN channel " |
4079 | 4079 | " ON channel.chanid = program.chanid) ") + fromclauses[clause] + QString( |
4080 | 4080 | " WHERE ") + whereclauses[clause] + |
4081 | | QString(" AND channel.visible = 1 ") + |
| 4081 | QString(" AND channel.deleted IS NULL " |
| 4082 | " AND channel.visible = 1 ") + |
4082 | 4083 | filterClause + QString(" AND " |
4083 | 4084 | |
4084 | 4085 | "(" |
… |
… |
void Scheduler::GetAllScheduled(RecList &proglist, SchedSortColumn sortBy, |
4913 | 4914 | " channel.commmethod " // 25 |
4914 | 4915 | "FROM record " |
4915 | 4916 | "LEFT JOIN channel ON channel.callsign = record.station " |
| 4917 | "WHERE deleted IS NULL " |
4916 | 4918 | "GROUP BY recordid " |
4917 | 4919 | "ORDER BY %1 %2"); |
4918 | 4920 | |
-
diff --git a/mythtv/programs/mythbackend/services/guide.cpp b/mythtv/programs/mythbackend/services/guide.cpp
index 8ba90868d6..e9d2464891 100644
a
|
b
|
DTC::ProgramList* Guide::GetProgramList(int nStartIndex, |
224 | 224 | + sSQL |
225 | 225 | + "oldprogram.oldtitle IS NULL AND "; |
226 | 226 | |
| 227 | sSQL += "deleted IS NULL AND "; |
| 228 | |
227 | 229 | if (!bWithInvisible) |
228 | 230 | sSQL += "visible != 0 AND "; |
229 | 231 | |
-
diff --git a/mythtv/programs/mythfilldatabase/filldata.cpp b/mythtv/programs/mythfilldatabase/filldata.cpp
index b8141fe7eb..b9383ed3cf 100644
a
|
b
|
bool FillData::Run(SourceList &sourcelist) |
260 | 260 | continue; |
261 | 261 | } |
262 | 262 | |
263 | | query.prepare("SELECT MAX(endtime) FROM program p LEFT JOIN channel c " |
264 | | "ON p.chanid=c.chanid WHERE c.sourceid= :SRCID " |
265 | | "AND manualid = 0 AND c.xmltvid != '';"); |
| 263 | query.prepare("SELECT MAX(endtime) " |
| 264 | "FROM program p " |
| 265 | "LEFT JOIN channel c ON p.chanid=c.chanid " |
| 266 | "WHERE c.deleted IS NULL AND c.sourceid= :SRCID " |
| 267 | " AND manualid = 0 AND c.xmltvid != '';"); |
266 | 268 | query.bindValue(":SRCID", (*it).id); |
267 | 269 | |
268 | 270 | if (query.exec() && query.next()) |
… |
… |
bool FillData::Run(SourceList &sourcelist) |
305 | 307 | .arg(xmltv_grabber)); |
306 | 308 | |
307 | 309 | query.prepare( |
308 | | "SELECT COUNT(chanid) FROM channel WHERE sourceid = " |
309 | | ":SRCID AND xmltvid != ''"); |
| 310 | "SELECT COUNT(chanid) FROM channel " |
| 311 | "WHERE deleted IS NULL AND " |
| 312 | " sourceid = :SRCID AND xmltvid != ''"); |
310 | 313 | query.bindValue(":SRCID", (*it).id); |
311 | 314 | |
312 | 315 | if (query.exec() && query.next()) |
… |
… |
bool FillData::Run(SourceList &sourcelist) |
481 | 484 | "INTERVAL '%1' DAY), INTERVAL '20' HOUR) " |
482 | 485 | " AND starttime < DATE_ADD(CURRENT_DATE(), " |
483 | 486 | "INTERVAL '%2' DAY) " |
484 | | "WHERE c.sourceid = %3 AND c.xmltvid != '' " |
| 487 | "WHERE c.deleted IS NULL AND c.sourceid = %3 AND c.xmltvid != '' " |
485 | 488 | "GROUP BY c.chanid;"; |
486 | 489 | |
487 | 490 | if (query.exec(querystr.arg(i-1).arg(i).arg((*it).id)) && |
… |
… |
bool FillData::Run(SourceList &sourcelist) |
650 | 653 | break; |
651 | 654 | } |
652 | 655 | |
653 | | query.prepare("SELECT MAX(endtime) FROM program p LEFT JOIN channel c " |
654 | | "ON p.chanid=c.chanid WHERE c.sourceid= :SRCID " |
| 656 | query.prepare("SELECT MAX(endtime) FROM program p " |
| 657 | "LEFT JOIN channel c ON p.chanid=c.chanid " |
| 658 | "WHERE c.deleted IS NULL AND c.sourceid= :SRCID " |
655 | 659 | "AND manualid = 0 AND c.xmltvid != '';"); |
656 | 660 | query.bindValue(":SRCID", (*it).id); |
657 | 661 | |
-
diff --git a/mythtv/programs/mythfilldatabase/main.cpp b/mythtv/programs/mythfilldatabase/main.cpp
index 1ee7370865..cce54ab65d 100644
a
|
b
|
int main(int argc, char *argv[]) |
290 | 290 | updateLastRunStatus(status); |
291 | 291 | |
292 | 292 | MSqlQuery query(MSqlQuery::InitCon()); |
293 | | query.prepare("SELECT MAX(endtime) FROM program p LEFT JOIN channel c " |
294 | | "ON p.chanid=c.chanid WHERE c.sourceid= :SRCID " |
| 293 | query.prepare("SELECT MAX(endtime) FROM program p " |
| 294 | "LEFT JOIN channel c ON p.chanid=c.chanid " |
| 295 | "WHERE c.deleted IS NULL AND c.sourceid= :SRCID " |
295 | 296 | "AND manualid = 0 AND c.xmltvid != '';"); |
296 | 297 | query.bindValue(":SRCID", fromfile_id); |
297 | 298 | |
… |
… |
int main(int argc, char *argv[]) |
309 | 310 | |
310 | 311 | updateLastRunEnd(); |
311 | 312 | |
312 | | query.prepare("SELECT MAX(endtime) FROM program p LEFT JOIN channel c " |
313 | | "ON p.chanid=c.chanid WHERE c.sourceid= :SRCID " |
| 313 | query.prepare("SELECT MAX(endtime) FROM program p " |
| 314 | "LEFT JOIN channel c ON p.chanid=c.chanid " |
| 315 | "WHERE c.deleted IS NULL AND c.sourceid= :SRCID " |
314 | 316 | "AND manualid = 0 AND c.xmltvid != '';"); |
315 | 317 | query.bindValue(":SRCID", fromfile_id); |
316 | 318 | |
… |
… |
int main(int argc, char *argv[]) |
554 | 556 | " FROM program p, channel c " |
555 | 557 | " WHERE p.programid <> '' " |
556 | 558 | " AND p.chanid = c.chanid " |
| 559 | " AND c.deleted IS NULL " |
557 | 560 | " AND c.visible = 1 " |
558 | 561 | " GROUP BY p.programid " |
559 | 562 | " ) AS firsts " |
… |
… |
int main(int argc, char *argv[]) |
570 | 573 | " FROM program p, channel c " |
571 | 574 | " WHERE p.programid = '' " |
572 | 575 | " AND p.chanid = c.chanid " |
| 576 | " AND c.deleted IS NULL " |
573 | 577 | " AND c.visible = 1 " |
574 | 578 | " GROUP BY p.title, p.subtitle, partdesc " |
575 | 579 | " ) AS firsts " |
… |
… |
int main(int argc, char *argv[]) |
590 | 594 | " FROM program p, channel c " |
591 | 595 | " WHERE p.programid <> '' " |
592 | 596 | " AND p.chanid = c.chanid " |
| 597 | " AND c.deleted IS NULL " |
593 | 598 | " AND c.visible = 1 " |
594 | 599 | " GROUP BY p.programid " |
595 | 600 | " ) AS lasts " |
… |
… |
int main(int argc, char *argv[]) |
606 | 611 | " FROM program p, channel c " |
607 | 612 | " WHERE p.programid = '' " |
608 | 613 | " AND p.chanid = c.chanid " |
| 614 | " AND c.deleted IS NULL " |
609 | 615 | " AND c.visible = 1 " |
610 | 616 | " GROUP BY p.title, p.subtitle, partdesc " |
611 | 617 | " ) AS lasts " |
-
diff --git a/mythtv/programs/mythfrontend/channelrecpriority.cpp b/mythtv/programs/mythfrontend/channelrecpriority.cpp
index 5c06147444..718c576711 100644
a
|
b
|
void ChannelRecPriority::FillList(void) |
251 | 251 | } |
252 | 252 | } |
253 | 253 | result.prepare("SELECT chanid, channum, sourceid, callsign, " |
254 | | "icon, recpriority, name FROM channel WHERE visible=1;"); |
| 254 | "icon, recpriority, name FROM channel " |
| 255 | "WHERE deleted IS NULL AND visible = 1"); |
255 | 256 | |
256 | 257 | if (result.exec()) |
257 | 258 | { |
-
diff --git a/mythtv/programs/mythfrontend/globalsettings.cpp b/mythtv/programs/mythfrontend/globalsettings.cpp
index 9dc4afedab..99c3ed61b5 100644
a
|
b
|
void ChannelGroupSetting::Load() |
4701 | 4701 | "SELECT channel.chanid, channum, name, grpid FROM channel " |
4702 | 4702 | "LEFT JOIN channelgroup " |
4703 | 4703 | "ON (channel.chanid = channelgroup.chanid AND grpid = :GRPID) " |
| 4704 | "WHERE deleted IS NULL " |
4704 | 4705 | "ORDER BY channum+0; "; //to order by numeric value of channel number |
4705 | 4706 | |
4706 | 4707 | query.prepare(qstr); |
-
diff --git a/mythtv/programs/mythfrontend/networkcontrol.cpp b/mythtv/programs/mythfrontend/networkcontrol.cpp
index e344e29270..256dcdb819 100644
a
|
b
|
QString NetworkControl::listChannels(const uint start, const uint limit) const |
1742 | 1742 | if (sqlStart > 0) |
1743 | 1743 | sqlStart--; |
1744 | 1744 | |
1745 | | queryStr = "select chanid, callsign, name from channel where visible=1"; |
1746 | | queryStr += " ORDER BY callsign"; |
| 1745 | queryStr = "select chanid, callsign, name from channel " |
| 1746 | "where deleted IS NULL and visible = 1 " |
| 1747 | "ORDER BY callsign"; |
1747 | 1748 | |
1748 | 1749 | if (limit > 0) // only if a limit is specified, we limit the results |
1749 | 1750 | { |
-
diff --git a/mythtv/programs/mythfrontend/progfind.cpp b/mythtv/programs/mythfrontend/progfind.cpp
index 9cd6766300..55a4884f89 100644
a
|
b
|
void ProgFinder::selectShowData(QString progTitle, int newCurShow) |
509 | 509 | MSqlBindings bindings; |
510 | 510 | QString querystr = "WHERE program.title = :TITLE " |
511 | 511 | " AND program.endtime > :ENDTIME " |
| 512 | " AND channel.deleted IS NULL " |
512 | 513 | " AND channel.visible = 1 "; |
513 | 514 | bindings[":TITLE"] = progTitle; |
514 | 515 | bindings[":ENDTIME"] = progStart.addSecs(50 - progStart.time().second()); |
… |
… |
void ProgFinder::whereClauseGetSearchData(QString &where, MSqlBindings &bindings |
546 | 547 | { |
547 | 548 | where = "SELECT DISTINCT title FROM program " |
548 | 549 | "LEFT JOIN channel ON program.chanid = channel.chanid " |
549 | | "WHERE channel.visible = 1 AND " |
| 550 | "WHERE channel.deleted IS NULL AND " |
| 551 | " channel.visible = 1 AND " |
550 | 552 | "( title NOT REGEXP '^[A-Z0-9]' AND " |
551 | 553 | " title NOT REGEXP '^The [A-Z0-9]' AND " |
552 | 554 | " title NOT REGEXP '^A [A-Z0-9]' AND " |
… |
… |
void ProgFinder::whereClauseGetSearchData(QString &where, MSqlBindings &bindings |
572 | 574 | |
573 | 575 | where = "SELECT DISTINCT title FROM program " |
574 | 576 | "LEFT JOIN channel ON program.chanid = channel.chanid " |
575 | | "WHERE channel.visible = 1 " |
| 577 | "WHERE channel.deleted IS NULL " |
| 578 | "AND channel.visible = 1 " |
576 | 579 | "AND ( title LIKE :ONE OR title LIKE :TWO " |
577 | 580 | " OR title LIKE :THREE " |
578 | 581 | " OR title LIKE :FOUR ) " |
… |
… |
void JaProgFinder::whereClauseGetSearchData(QString &where, MSqlBindings &bindin |
736 | 739 | |
737 | 740 | where = "SELECT DISTINCT title FROM program " |
738 | 741 | "LEFT JOIN channel ON program.chanid = channel.chanid " |
739 | | "WHERE channel.visible = 1 "; |
| 742 | "WHERE channel.deleted IS NULL AND channel.visible = 1 "; |
740 | 743 | |
741 | 744 | switch (charNum) { |
742 | 745 | case 0: |
… |
… |
void HeProgFinder::whereClauseGetSearchData(QString &where, MSqlBindings &bindin |
858 | 861 | |
859 | 862 | where = "SELECT DISTINCT title FROM program " |
860 | 863 | "LEFT JOIN channel ON program.chanid = channel.chanid " |
861 | | "WHERE channel.visible = 1 "; |
| 864 | "WHERE channel.deleted IS NULL AND channel.visible = 1 "; |
862 | 865 | |
863 | 866 | if (searchChar.contains('E')) |
864 | 867 | { |
… |
… |
void RuProgFinder::whereClauseGetSearchData(QString &where, MSqlBindings |
974 | 977 | { |
975 | 978 | where = "SELECT DISTINCT title FROM program " |
976 | 979 | "LEFT JOIN channel ON program.chanid = channel.chanid " |
977 | | "WHERE channel.visible = 1 AND " |
| 980 | "WHERE channel.deleted IS NULL AND " |
| 981 | " channel.visible = 1 AND " |
978 | 982 | "( " |
979 | 983 | "title NOT REGEXP '^[A-Z0-9]' AND " |
980 | 984 | "title NOT REGEXP '^The [A-Z0-9]' AND " |
… |
… |
void RuProgFinder::whereClauseGetSearchData(QString &where, MSqlBindings |
1002 | 1006 | |
1003 | 1007 | where = "SELECT DISTINCT title FROM program " |
1004 | 1008 | "LEFT JOIN channel ON program.chanid = channel.chanid " |
1005 | | "WHERE channel.visible = 1 " |
| 1009 | "WHERE channel.deleted IS NULL " |
| 1010 | "AND channel.visible = 1 " |
1006 | 1011 | "AND ( title LIKE :ONE OR title LIKE :TWO " |
1007 | 1012 | " OR title LIKE :THREE " |
1008 | 1013 | " OR title LIKE :FOUR " |
-
diff --git a/mythtv/programs/mythfrontend/proglist.cpp b/mythtv/programs/mythfrontend/proglist.cpp
index 34142e2fd5..9213dfe796 100644
a
|
b
|
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1096 | 1096 | |
1097 | 1097 | if (m_type == plTitle) // per title listings |
1098 | 1098 | { |
1099 | | where = "WHERE channel.visible = 1 " |
| 1099 | where = "WHERE channel.deleted IS NULL " |
| 1100 | " AND channel.visible = 1 " |
1100 | 1101 | " AND program.endtime > :PGILSTART " |
1101 | 1102 | " AND (program.title = :PGILPHRASE0 OR " |
1102 | 1103 | " (program.seriesid <> '' AND " |
… |
… |
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1108 | 1109 | { |
1109 | 1110 | where = "LEFT JOIN oldprogram ON " |
1110 | 1111 | " oldprogram.oldtitle = program.title " |
1111 | | "WHERE channel.visible = 1 " |
| 1112 | "WHERE channel.deleted IS NULL " |
| 1113 | " AND channel.visible = 1 " |
1112 | 1114 | " AND program.endtime > :PGILSTART " |
1113 | 1115 | " AND oldprogram.oldtitle IS NULL " |
1114 | 1116 | " AND program.manualid = 0 "; |
… |
… |
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1145 | 1147 | } |
1146 | 1148 | else if (m_type == plTitleSearch) // keyword search |
1147 | 1149 | { |
1148 | | where = "WHERE channel.visible = 1 " |
| 1150 | where = "WHERE channel.deleted IS NULL " |
| 1151 | " AND channel.visible = 1 " |
1149 | 1152 | " AND program.endtime > :PGILSTART " |
1150 | 1153 | " AND program.title LIKE :PGILLIKEPHRASE0 "; |
1151 | 1154 | bindings[":PGILLIKEPHRASE0"] = QString("%") + qphrase + '%'; |
1152 | 1155 | } |
1153 | 1156 | else if (m_type == plKeywordSearch) // keyword search |
1154 | 1157 | { |
1155 | | where = "WHERE channel.visible = 1 " |
| 1158 | where = "WHERE channel.deleted IS NULL " |
| 1159 | " AND channel.visible = 1 " |
1156 | 1160 | " AND program.endtime > :PGILSTART " |
1157 | 1161 | " AND (program.title LIKE :PGILLIKEPHRASE1 " |
1158 | 1162 | " OR program.subtitle LIKE :PGILLIKEPHRASE2 " |
… |
… |
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1163 | 1167 | } |
1164 | 1168 | else if (m_type == plPeopleSearch) // people search |
1165 | 1169 | { |
1166 | | where = ", people, credits WHERE channel.visible = 1 " |
| 1170 | where = ", people, credits " |
| 1171 | "WHERE channel.deleted IS NULL " |
| 1172 | " AND channel.visible = 1 " |
1167 | 1173 | " AND program.endtime > :PGILSTART " |
1168 | 1174 | " AND people.name LIKE :PGILPHRASE1 " |
1169 | 1175 | " AND credits.person = people.person " |
… |
… |
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1185 | 1191 | "program.chanid = programgenres.chanid AND " |
1186 | 1192 | "program.starttime = programgenres.starttime "); |
1187 | 1193 | |
1188 | | where += QString("WHERE channel.visible = 1 " |
| 1194 | where += QString("WHERE channel.deleted IS NULL " |
| 1195 | " AND channel.visible = 1 " |
1189 | 1196 | " AND program.endtime > :PGILSTART " |
1190 | 1197 | " AND ( ") + powerWhere + " ) "; |
1191 | 1198 | MSqlAddMoreBindings(bindings, powerBindings); |
… |
… |
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1194 | 1201 | else if (m_type == plSQLSearch) // complex search |
1195 | 1202 | { |
1196 | 1203 | qphrase.remove(QRegExp("^\\s*AND\\s+", Qt::CaseInsensitive)); |
1197 | | where = QString("WHERE channel.visible = 1 " |
| 1204 | where = QString("WHERE channel.deleted iS NULL " |
| 1205 | " AND channel.visible = 1 " |
1198 | 1206 | " AND program.endtime > :PGILSTART " |
1199 | 1207 | " AND ( %1 ) ").arg(qphrase); |
1200 | 1208 | if (!m_extraArg.isEmpty()) |
… |
… |
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1202 | 1210 | } |
1203 | 1211 | else if (m_type == plChannel) // list by channel |
1204 | 1212 | { |
1205 | | where = "WHERE channel.visible = 1 " |
| 1213 | where = "WHERE channel.deleted IS NULL " |
| 1214 | " AND channel.visible = 1 " |
1206 | 1215 | " AND program.endtime > :PGILSTART " |
1207 | 1216 | " AND channel.chanid = :PGILPHRASE2 "; |
1208 | 1217 | bindings[":PGILPHRASE2"] = qphrase; |
… |
… |
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1211 | 1220 | { |
1212 | 1221 | if (!m_useGenres) |
1213 | 1222 | { |
1214 | | where = "WHERE channel.visible = 1 " |
| 1223 | where = "WHERE channel.deleted IS NULL " |
| 1224 | " AND channel.visible = 1 " |
1215 | 1225 | " AND program.endtime > :PGILSTART " |
1216 | 1226 | " AND program.category = :PGILPHRASE3 "; |
1217 | 1227 | bindings[":PGILPHRASE3"] = qphrase; |
… |
… |
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1222 | 1232 | " program.chanid = g.chanid AND " |
1223 | 1233 | " program.starttime = g.starttime AND " |
1224 | 1234 | " genre = :PGILPHRASE4 " |
1225 | | "WHERE channel.visible = 1 " |
| 1235 | "WHERE channel.deleted IS NULL " |
| 1236 | " AND channel.visible = 1 " |
1226 | 1237 | " AND program.endtime > :PGILSTART "; |
1227 | 1238 | bindings[":PGILPHRASE4"] = qphrase; |
1228 | 1239 | } |
… |
… |
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1236 | 1247 | " program.chanid = g2.chanid AND " |
1237 | 1248 | " program.starttime = g2.starttime AND " |
1238 | 1249 | " g2.genre = :GENRE2 " |
1239 | | "WHERE channel.visible = 1 " |
| 1250 | "WHERE channel.deleted IS NULL " |
| 1251 | " AND channel.visible = 1 " |
1240 | 1252 | " AND program.endtime > :PGILSTART "; |
1241 | 1253 | bindings[":GENRE1"] = m_viewList[m_curView].section(":/:", 0, 0); |
1242 | 1254 | bindings[":GENRE2"] = m_viewList[m_curView].section(":/:", 1, 1); |
… |
… |
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1244 | 1256 | } |
1245 | 1257 | else if (m_type == plMovies) // list movies |
1246 | 1258 | { |
1247 | | where = "WHERE channel.visible = 1 " |
| 1259 | where = "WHERE channel.deleted IS NULL " |
| 1260 | " AND channel.visible = 1 " |
1248 | 1261 | " AND program.endtime > :PGILSTART " |
1249 | 1262 | " AND program.category_type = 'movie' " |
1250 | 1263 | " AND program.stars " + qphrase + ' '; |
… |
… |
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1254 | 1267 | QDateTime searchTime(m_searchTime); |
1255 | 1268 | searchTime.setTime(QTime(searchTime.time().hour(), 0, 0)); |
1256 | 1269 | bindings[":PGILSEARCHTIME1"] = searchTime; |
1257 | | where = "WHERE channel.visible = 1 " |
| 1270 | where = "WHERE channel.deleted IS NULL " |
| 1271 | " AND channel.visible = 1 " |
1258 | 1272 | " AND program.starttime >= :PGILSEARCHTIME1 "; |
1259 | 1273 | if (m_titleSort) |
1260 | 1274 | { |
… |
… |
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1268 | 1282 | where = "JOIN recordmatch ON " |
1269 | 1283 | " (program.starttime = recordmatch.starttime " |
1270 | 1284 | " AND program.chanid = recordmatch.chanid) " |
1271 | | "WHERE channel.visible = 1 " |
| 1285 | "WHERE channel.deleted IS NULL " |
| 1286 | " AND channel.visible = 1 " |
1272 | 1287 | " AND program.endtime > :PGILSTART " |
1273 | 1288 | " AND recordmatch.recordid = :PGILPHRASE5 "; |
1274 | 1289 | bindings[":PGILPHRASE5"] = qphrase; |
… |
… |
void ProgLister::FillItemList(bool restorePosition, bool updateDisp) |
1285 | 1300 | QString fromc = query.value(0).toString(); |
1286 | 1301 | QString wherec = query.value(1).toString(); |
1287 | 1302 | |
1288 | | where = QString("WHERE channel.visible = 1 " |
| 1303 | where = QString("WHERE channel.deleted IS NULL " |
| 1304 | " AND channel.visible = 1 " |
1289 | 1305 | " AND program.endtime > :PGILSTART " |
1290 | 1306 | " AND ( %1 ) ").arg(wherec); |
1291 | 1307 | if (!fromc.isEmpty()) |
-
diff --git a/mythtv/programs/mythtv-setup/channeleditor.cpp b/mythtv/programs/mythtv-setup/channeleditor.cpp
index e8e0984af4..9a13b4775b 100644
a
|
b
|
void ChannelEditor::fillList(void) |
252 | 252 | "LEFT JOIN videosource ON " |
253 | 253 | "(channel.sourceid = videosource.sourceid) " |
254 | 254 | "LEFT JOIN dtv_multiplex ON " |
255 | | "(channel.mplexid = dtv_multiplex.mplexid)"; |
| 255 | "(channel.mplexid = dtv_multiplex.mplexid) " |
| 256 | "WHERE deleted IS NULL "; |
256 | 257 | |
257 | 258 | if (m_sourceFilter == FILTER_ALL) |
258 | 259 | { |
… |
… |
void ChannelEditor::fillList(void) |
260 | 261 | } |
261 | 262 | else |
262 | 263 | { |
263 | | querystr += QString(" WHERE channel.sourceid='%1' ") |
| 264 | querystr += QString("AND channel.sourceid='%1' ") |
264 | 265 | .arg(m_sourceFilter); |
265 | 266 | fAllSources = false; |
266 | 267 | } |
… |
… |
void ChannelEditor::customEvent(QEvent *event) |
710 | 711 | else |
711 | 712 | { |
712 | 713 | tmp = tmp.left(tmp.length() - 1); |
713 | | query.prepare(QString("DELETE FROM channel " |
714 | | "WHERE sourceid NOT IN (%1)").arg(tmp)); |
| 714 | query.prepare(QString("UPDATE channel " |
| 715 | "SET deleted = NOW() " |
| 716 | "WHERE deleted IS NULL AND " |
| 717 | " sourceid NOT IN (%1)").arg(tmp)); |
715 | 718 | } |
716 | 719 | } |
717 | 720 | else |
718 | 721 | { |
719 | | query.prepare("DELETE FROM channel " |
720 | | "WHERE sourceid = :SOURCEID"); |
| 722 | query.prepare("UPDATE channel " |
| 723 | "SET deleted = NOW() " |
| 724 | "WHERE deleted IS NULL AND sourceid = :SOURCEID"); |
721 | 725 | query.bindValue(":SOURCEID", m_sourceFilter); |
722 | 726 | } |
723 | 727 | |
-
diff --git a/mythtv/programs/mythtv-setup/checksetup.cpp b/mythtv/programs/mythtv-setup/checksetup.cpp
index c1301289d1..9c76541b93 100644
a
|
b
|
bool checkChannelPresets(QStringList &probs) |
212 | 212 | MSqlQuery channelExists(MSqlQuery::InitCon()); |
213 | 213 | QString channelQuery; |
214 | 214 | channelQuery = QString("SELECT chanid FROM channel" |
215 | | " WHERE channum='%1' AND sourceid=%2;") |
| 215 | " WHERE deleted IS NULL AND " |
| 216 | " channum = '%1' AND " |
| 217 | " sourceid = %2;") |
216 | 218 | .arg(startchan).arg(sourceid); |
217 | 219 | channelExists.prepare(channelQuery); |
218 | 220 | |
-
diff --git a/mythtv/programs/mythtv-setup/importicons.cpp b/mythtv/programs/mythtv-setup/importicons.cpp
index 6774814d4d..5c0d7f1235 100644
a
|
b
|
bool ImportIconsWizard::initialLoad(const QString& name) |
287 | 287 | "dtv_multiplex.mplexid, channel.icon, channel.visible " |
288 | 288 | "FROM channel LEFT JOIN dtv_multiplex " |
289 | 289 | "ON channel.mplexid = dtv_multiplex.mplexid " |
290 | | "WHERE "); |
| 290 | "WHERE deleted IS NULL AND "); |
291 | 291 | if (!name.isEmpty()) |
292 | 292 | querystring.append("name=\"" + name + "\""); |
293 | 293 | else |
-
diff --git a/mythtv/programs/mythutil/eitutils.cpp b/mythtv/programs/mythutil/eitutils.cpp
index 9422c7cc57..fb2e43ac48 100644
a
|
b
|
static int ClearEIT(const MythUtilCommandLineParser &cmdline) |
32 | 32 | |
33 | 33 | // delete program for all channels that use EIT on sources that use EIT |
34 | 34 | sql = "DELETE FROM program WHERE chanid IN (" |
35 | | "SELECT chanid FROM channel WHERE useonairguide=1 AND sourceid IN (" |
| 35 | "SELECT chanid FROM channel " |
| 36 | "WHERE deleted IS NULL AND " |
| 37 | " useonairguide = 1 AND " |
| 38 | " sourceid IN (" |
36 | 39 | "SELECT sourceid FROM videosource WHERE useeit=1"; |
37 | 40 | if (-1 != sourceid) |
38 | 41 | { |
… |
… |
static int ClearEIT(const MythUtilCommandLineParser &cmdline) |
54 | 57 | |
55 | 58 | // delete programrating for all channels that use EIT on sources that use EIT |
56 | 59 | sql = "DELETE FROM programrating WHERE chanid IN (" |
57 | | "SELECT chanid FROM channel WHERE useonairguide=1 AND sourceid IN (" |
| 60 | "SELECT chanid FROM channel " |
| 61 | "WHERE deleted IS NULL AND " |
| 62 | " useonairguide = 1 AND " |
| 63 | " sourceid IN (" |
58 | 64 | "SELECT sourceid FROM videosource WHERE useeit=1"; |
59 | 65 | if (-1 != sourceid) |
60 | 66 | { |
… |
… |
static int ClearEIT(const MythUtilCommandLineParser &cmdline) |
76 | 82 | |
77 | 83 | // delete credits for all channels that use EIT on sources that use EIT |
78 | 84 | sql = "DELETE FROM credits WHERE chanid IN (" |
79 | | "SELECT chanid FROM channel WHERE useonairguide=1 AND sourceid IN (" |
| 85 | "SELECT chanid FROM channel " |
| 86 | "WHERE deleted IS NULL AND " |
| 87 | " useonairguide = 1 AND " |
| 88 | " sourceid IN (" |
80 | 89 | "SELECT sourceid FROM videosource WHERE useeit=1"; |
81 | 90 | if (-1 != sourceid) |
82 | 91 | { |
… |
… |
static int ClearEIT(const MythUtilCommandLineParser &cmdline) |
98 | 107 | |
99 | 108 | // delete program genres for all channels that use EIT on sources that use EIT |
100 | 109 | sql = "DELETE FROM programgenres WHERE chanid IN (" |
101 | | "SELECT chanid FROM channel WHERE useonairguide=1 AND sourceid IN (" |
| 110 | "SELECT chanid FROM channel " |
| 111 | "WHERE deleted IS NULL AND " |
| 112 | " useonairguide = 1 AND " |
| 113 | " sourceid IN (" |
102 | 114 | "SELECT sourceid FROM videosource WHERE useeit=1"; |
103 | 115 | if (-1 != sourceid) |
104 | 116 | { |