code: def __check_index(self, start_date, end_date):
          
          index_query = """SELECT id
                             FROM facts
                            WHERE (end_time >= ? OR end_time IS NULL)
                              AND start_time <= ?
                              AND id not in(select id from fact_index)"""
  
          rebuild_ids = ",".join([str(res[0]) for res in self.fetchall(index_query, (start_date, end_date))])
  
          if rebuild_ids:
              query = """
                         SELECT a.id AS id,
                                a.start_time AS start_time,
                                a.end_time AS end_time,
                                a.description as description,
                                b.name AS name, b.id as activity_id,
                                coalesce(c.name, ?) as category,
                                e.name as tag
                           FROM facts a
                      LEFT JOIN activities b ON a.activity_id = b.id
                      LEFT JOIN categories c ON b.category_id = c.id
                      LEFT JOIN fact_tags d ON d.fact_id = a.id
                      LEFT JOIN tags e ON e.id = d.tag_id
                          WHERE a.id in (%s)
                       ORDER BY a.id
              """ % rebuild_ids
  
              facts = self.__group_tags(self.fetchall(query, (self._unsorted_localized, )))
  
              insert = """INSERT INTO fact_index (id, name, category, description, tag)
                               VALUES (?, ?, ?, ?, ?)"""
              params = [(fact['id'], fact['name'], fact['category'], fact['description'], " ".join(fact['tags'])) for fact in facts]
  
              self.executemany(insert, params)
docs: check if maybe index needs rebuilding in the time span