Go to the documentation of this file.
16 #define LOC QString("EITCache: ")
71 return (((uint64_t)
modified << 63) | ((uint64_t) tableid << 40) |
72 ((uint64_t)
version << 32) | ((uint64_t) endtime));
77 return (sig >> 40) & 0xff;
82 return (sig >> 32) & 0x1f;
87 return sig & 0xffffffff;
92 return (sig >> 63) != 0U;
96 uint chanid,
uint eventid, uint64_t sig)
98 value_clauses << QString(
"(%1,%2,%3,%4,%5)")
105 LOG(VB_EIT, LOG_INFO,
LOC +
"Deleting old cache entries from the database");
109 "DELETE FROM eit_cache "
110 "WHERE endtime < :ENDTIME";
131 QString qstr =
"SELECT COUNT(*) "
133 "WHERE chanid = :CHANID AND "
134 " endtime > :ENDTIME AND "
149 lock = query.
value(0).toInt();
153 LOG(VB_EIT, LOG_INFO,
154 LOC + QString(
"Ignoring channel %1 since it is locked.")
159 qstr =
"INSERT INTO eit_cache "
160 " ( chanid, endtime, status) "
161 "VALUES (:CHANID, :ENDTIME, :STATUS)";
182 "DELETE FROM eit_cache "
183 "WHERE chanid = :CHANID AND "
195 qstr =
"REPLACE INTO eit_cache "
196 " ( chanid, eventid, endtime, status) "
197 "VALUES (:CHANID, :EVENTID, :ENDTIME, :STATUS)";
223 "SELECT eventid,tableid,version,endtime "
225 "WHERE chanid = :CHANID AND "
226 " endtime > :ENDTIME AND "
252 if (!eventMap->empty())
253 LOG(VB_EIT, LOG_DEBUG,
LOC + QString(
"Loaded %1 entries for chanid %2")
254 .arg(eventMap->size()).arg(chanid));
267 uint size = eventMap->size();
271 event_map_t::iterator it = eventMap->begin();
272 while (it != eventMap->end())
284 *it &= ~(uint64_t)0 >> 1;
291 it = eventMap->erase(it);
305 LOG(VB_EIT, LOG_DEBUG,
LOC +
306 QString(
"Writing %1 modified entries of %2 for chanid %3 to database.")
307 .arg(updated).arg(size).arg(chanid));
311 LOG(VB_EIT, LOG_DEBUG,
LOC +
312 QString(
"Updated %1 modified entries of %2 for chanid %3 in cache.")
313 .arg(updated).arg(size).arg(chanid));
318 LOG(VB_EIT, LOG_DEBUG,
LOC + QString(
"Removed %1 old entries of %2 "
319 "for chanid %3 from cache.")
320 .arg(removed).arg(size).arg(chanid));
331 QStringList value_clauses;
343 if(value_clauses.isEmpty())
349 query.
prepare(QString(
"REPLACE INTO eit_cache "
350 "(chanid, eventid, tableid, version, endtime) "
351 "VALUES %1").arg(value_clauses.join(
",")));
397 event_map_t::iterator it = eventMap->find(eventid);
398 if (it != eventMap->end())
439 LOG(VB_EIT, LOG_INFO,
440 LOC +
"Pruning all entries that ended before UTC " +
467 "DELETE FROM eit_cache "
468 "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.