Go to the documentation of this file.
17 #define LOC QString("EITCache: ")
72 return (((uint64_t)
modified << 63) | ((uint64_t) tableid << 40) |
73 ((uint64_t)
version << 32) | ((uint64_t) endtime));
78 return (sig >> 40) & 0xff;
83 return (sig >> 32) & 0x1f;
88 return sig & 0xffffffff;
93 return (sig >> 63) != 0U;
97 uint chanid,
uint eventid, uint64_t sig)
99 value_clauses << QString(
"(%1,%2,%3,%4,%5)")
106 LOG(VB_EIT, LOG_INFO,
LOC +
"Deleting old cache entries from the database");
110 "DELETE FROM eit_cache "
111 "WHERE endtime < :ENDTIME";
132 QString qstr =
"SELECT COUNT(*) "
134 "WHERE chanid = :CHANID AND "
135 " endtime > :ENDTIME AND "
150 lock = query.
value(0).toInt();
154 LOG(VB_EIT, LOG_INFO,
155 LOC + QString(
"Ignoring channel %1 since it is locked.")
160 qstr =
"INSERT INTO eit_cache "
161 " ( chanid, endtime, status) "
162 "VALUES (:CHANID, :ENDTIME, :STATUS)";
183 "DELETE FROM eit_cache "
184 "WHERE chanid = :CHANID AND "
196 qstr =
"REPLACE INTO eit_cache "
197 " ( chanid, eventid, endtime, status) "
198 "VALUES (:CHANID, :EVENTID, :ENDTIME, :STATUS)";
224 "SELECT eventid,tableid,version,endtime "
226 "WHERE chanid = :CHANID AND "
227 " endtime > :ENDTIME AND "
253 if (!eventMap->empty())
254 LOG(VB_EIT, LOG_DEBUG,
LOC + QString(
"Loaded %1 entries for chanid %2")
255 .arg(eventMap->size()).arg(chanid));
268 uint size = eventMap->size();
272 event_map_t::iterator it = eventMap->begin();
273 while (it != eventMap->end())
285 *it &= ~(uint64_t)0 >> 1;
292 it = eventMap->erase(it);
306 LOG(VB_EIT, LOG_DEBUG,
LOC +
307 QString(
"Writing %1 modified entries of %2 for chanid %3 to database.")
308 .arg(updated).arg(size).arg(chanid));
312 LOG(VB_EIT, LOG_DEBUG,
LOC +
313 QString(
"Updated %1 modified entries of %2 for chanid %3 in cache.")
314 .arg(updated).arg(size).arg(chanid));
319 LOG(VB_EIT, LOG_DEBUG,
LOC + QString(
"Removed %1 old entries of %2 "
320 "for chanid %3 from cache.")
321 .arg(removed).arg(size).arg(chanid));
332 QStringList value_clauses;
344 if(value_clauses.isEmpty())
350 query.
prepare(QString(
"REPLACE INTO eit_cache "
351 "(chanid, eventid, tableid, version, endtime) "
352 "VALUES %1").arg(value_clauses.join(
",")));
398 event_map_t::iterator it = eventMap->find(eventid);
399 if (it != eventMap->end())
440 LOG(VB_EIT, LOG_INFO,
441 LOC +
"Pruning all entries that ended before UTC " +
468 "DELETE FROM eit_cache "
469 "WHERE status = :STATUS";
static void replace_in_db(QStringList &value_clauses, uint chanid, uint eventid, uint64_t sig)
bool isActive(void) const
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
QSqlQuery wrapper that fetches a DB connection from the connection pool.
static uint extract_endtime(uint64_t sig)
static MTV_PUBLIC void ClearChannelLocks(void)
Removes old channel locks, use it only at master backend start.
static uint extract_table_id(uint64_t sig)
static bool lock_channel(uint chanid, uint endtime)
static bool VERBOSE_LEVEL_CHECK(uint64_t mask, LogLevel_t level)
QVariant value(int i) const
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
uint m_wrongChannelHitCnt
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
MBASE_PUBLIC QDateTime fromSecsSinceEpoch(int64_t seconds)
This function takes the number of seconds since the start of the epoch and returns a QDateTime with t...
static void unlock_channel(uint chanid, uint updated)
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
static void DBError(const QString &where, const MSqlQuery &query)
QString GetStatistics(void) const
uint PruneOldEntries(uint utc_timestamp)
Prunes entries that describe events ending before timestamp time.
static uint64_t construct_sig(uint tableid, uint version, uint endtime, bool modified)
void ResetStatistics(void)
bool IsNewEIT(uint chanid, uint tableid, uint version, uint eventid, uint endtime)
static uint extract_version(uint64_t sig)
bool WriteChannelToDB(QStringList &value_clauses, uint chanid)
static const uint kVersionMax
QMap< uint, uint64_t > event_map_t
void bindValue(const QString &placeholder, const QVariant &val)
Add a single binding.
event_map_t * LoadChannel(uint chanid)
static bool modified(uint64_t sig)
static void delete_in_db(uint endtime)
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.