+ Option option(m_db);\r
+ std::string ll("");\r
+ option.Get("LogLevel",ll);\r
+\r
+ // TODO - remove after corruption issue fixed\r
+ if(ll=="8")\r
+ {\r
+ std::string dbres=TestDBIntegrity(m_db);\r
+ m_log->trace("DBMaintenanceThread::Do10MinuteMaintenance() start TestDBIntegrity returned "+dbres);\r
+ }\r
+\r
+ ThreadBuilder tb(m_db);\r
+ SQLite3DB::Statement boardst=m_db->Prepare("SELECT BoardID FROM tblBoard WHERE Forum='true';");\r
+ // select messages for a board that aren't in a thread\r
+ SQLite3DB::Statement selectst=m_db->Prepare("SELECT tblMessage.MessageID FROM tblMessage \\r
+ INNER JOIN tblMessageBoard ON tblMessage.MessageID=tblMessageBoard.MessageID\\r
+ LEFT JOIN tblThreadPost ON tblMessage.MessageID=tblThreadPost.MessageID \\r
+ LEFT JOIN tblThread ON tblThreadPost.ThreadID=tblThread.ThreadID\\r
+ WHERE tblMessageBoard.BoardID=? AND tblThread.BoardID IS NULL;");\r
+\r
+ boardst.Step();\r
+ while(boardst.RowReturned())\r
+ {\r
+ int boardid=-1;\r
+\r
+ boardst.ResultInt(0,boardid);\r
+\r
+ selectst.Bind(0,boardid);\r
+ selectst.Step();\r
+\r
+ while(selectst.RowReturned())\r
+ {\r
+ int messageid=-1;\r
+\r
+ selectst.ResultInt(0,messageid);\r
+\r
+ tb.Build(messageid,boardid,true);\r
+\r
+ selectst.Step();\r
+ }\r
+ selectst.Reset();\r
+\r
+ boardst.Step();\r
+ }\r
+\r
+ // TODO - remove after corruption issue fixed\r
+ if(ll=="8")\r
+ {\r
+ std::string dbres=TestDBIntegrity(m_db);\r
+ m_log->trace("DBMaintenanceThread::Do10MinuteMaintenance() middle TestDBIntegrity returned "+dbres);\r
+ if(dbres!="ok")\r
+ {\r
+ m_db->Execute("REINDEX;");\r
+ dbres=TestDBIntegrity(m_db);\r
+ m_log->trace("DBMaintenanceThread::Do10MinuteMaintenenace() middle after reindex returned "+dbres);\r
+ }\r
+ }\r
+\r
+ // now rebuild threads where the message has been deleted\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT tblThreadPost.MessageID, tblThread.BoardID FROM tblThreadPost INNER JOIN tblThread ON tblThreadPost.ThreadID=tblThread.ThreadID LEFT JOIN tblMessage ON tblThreadPost.MessageID=tblMessage.MessageID WHERE tblMessage.MessageID IS NULL;");\r
+ st.Step();\r
+ while(st.RowReturned())\r
+ {\r
+ int messageid=-1;\r
+ int boardid=-1;\r
+\r
+ st.ResultInt(0,messageid);\r
+ st.ResultInt(1,boardid);\r
+\r
+ tb.Build(messageid,boardid,true);\r
+\r
+ st.Step();\r
+ }\r
+\r
+ // delete threads that have no messages\r
+ m_db->Execute("DELETE FROM tblThread WHERE ThreadID IN (SELECT tblThread.ThreadID FROM tblThread LEFT JOIN tblThreadPost ON tblThread.ThreadID=tblThreadPost.ThreadID WHERE tblThreadPost.ThreadID IS NULL);");\r
+\r
+ // TODO - remove after corruption issue fixed\r
+ if(ll=="8")\r
+ {\r
+ std::string dbres=TestDBIntegrity(m_db);\r
+ m_log->trace("DBMaintenanceThread::Do10MinuteMaintenance() end TestDBIntegrity returned "+dbres);\r
+ }\r