version 0.3.26
[fms.git] / src / threadbuilder.cpp
index 175a34a..1a6a764 100644 (file)
@@ -1,6 +1,10 @@
 #include "../include/threadbuilder.h"\r
 #include "../include/messagethread.h"\r
 \r
+#include "../include/dbsetup.h"\r
+#include "../include/stringfunctions.h"\r
+#include "../include/option.h"\r
+\r
 const bool ThreadBuilder::Build(const long messageid, const long boardid, const bool bydate)\r
 {\r
        int count=0;\r
@@ -8,6 +12,20 @@ const bool ThreadBuilder::Build(const long messageid, const long boardid, const
        MessageThread mt;\r
        std::vector<MessageThread::threadnode> m_threadmessages;\r
 \r
+       std::string ll="";\r
+       Option::Instance()->Get("LogLevel",ll);\r
+\r
+       // TODO - remove after corruption issue fixed\r
+       if(ll=="8")\r
+       {\r
+               std::string dbres=TestDBIntegrity();\r
+               std::string messageidstr="";\r
+               std::string boardidstr="";\r
+               StringFunctions::Convert(messageid,messageidstr);\r
+               StringFunctions::Convert(boardid,boardidstr);\r
+               m_log->trace("ThreadBuilder::Build start TestDBIntegrity("+messageidstr+","+boardidstr+") returned "+dbres);\r
+       }\r
+\r
        mt.Load(messageid,boardid,bydate);\r
        m_threadmessages=mt.GetNodes();\r
 \r
@@ -50,22 +68,52 @@ const bool ThreadBuilder::Build(const long messageid, const long boardid, const
                }\r
        }\r
 \r
+       // TODO - remove after corruption issue fixed\r
+       if(ll=="8")\r
+       {\r
+               std::string dbres=TestDBIntegrity();\r
+               if(dbres!="ok")\r
+               {\r
+                       m_log->trace("ThreadBuilder::Build middle TestDBIntegrity returned "+dbres);\r
+               }\r
+       }\r
+\r
        if(m_threadmessages.size()>0)\r
        {\r
-               st=m_db->Prepare("UPDATE tblThread SET FirstMessageID=?, LastMessageID=? WHERE ThreadID=?;");\r
-               st.Bind(0,m_threadmessages[0].m_messageid);\r
-               st.Bind(1,m_threadmessages[m_threadmessages.size()-1].m_messageid);\r
-               st.Bind(2,threadid);\r
-               st.Step();\r
+               SQLite3DB::Statement st2=m_db->Prepare("UPDATE tblThread SET FirstMessageID=?, LastMessageID=? WHERE ThreadID=?;");\r
+               st2.Bind(0,m_threadmessages[0].m_messageid);\r
+               st2.Bind(1,m_threadmessages[m_threadmessages.size()-1].m_messageid);\r
+               st2.Bind(2,threadid);\r
+               st2.Step();\r
+\r
+               // TODO - remove after corruption issue fixed\r
+               if(ll=="8")\r
+               {\r
+                       std::string dbres=TestDBIntegrity();\r
+                       if(dbres!="ok")\r
+                       {\r
+                               m_log->trace("ThreadBuilder::Build after thread update TestDBIntegrity returned "+dbres);\r
+                       }\r
+               }\r
 \r
-               st=m_db->Prepare("DELETE FROM tblThreadPost WHERE ThreadID=?;");\r
-               st.Bind(0,threadid);\r
-               st.Step();\r
+               SQLite3DB::Statement st3=m_db->Prepare("DELETE FROM tblThreadPost WHERE ThreadID=?;");\r
+               st3.Bind(0,threadid);\r
+               st3.Step();\r
+\r
+               // TODO - remove after corruption issue fixed\r
+               if(ll=="8")\r
+               {\r
+                       std::string dbres=TestDBIntegrity();\r
+                       if(dbres!="ok")\r
+                       {\r
+                               m_log->trace("ThreadBuilder::Build after thread post delete TestDBIntegrity returned "+dbres);\r
+                       }\r
+               }\r
 \r
                SQLite3DB::Statement deleteotherst=m_db->Prepare("DELETE FROM tblThread WHERE ThreadID IN (SELECT tblThread.ThreadID FROM tblThreadPost INNER JOIN tblThread ON tblThreadPost.ThreadID=tblThread.ThreadID WHERE tblThread.BoardID=? AND tblThreadPost.MessageID=?);");\r
 \r
                count=0;\r
-               st=m_db->Prepare("INSERT INTO tblThreadPost(ThreadID,MessageID,PostOrder) VALUES(?,?,?);");\r
+               SQLite3DB::Statement st4=m_db->Prepare("INSERT INTO tblThreadPost(ThreadID,MessageID,PostOrder) VALUES(?,?,?);");\r
                for(std::vector<MessageThread::threadnode>::const_iterator i=m_threadmessages.begin(); i!=m_threadmessages.end(); i++, count++)\r
                {\r
                        deleteotherst.Bind(0,boardid);\r
@@ -73,18 +121,47 @@ const bool ThreadBuilder::Build(const long messageid, const long boardid, const
                        deleteotherst.Step();\r
                        deleteotherst.Reset();\r
 \r
-                       st.Bind(0,threadid);\r
-                       st.Bind(1,(*i).m_messageid);\r
-                       st.Bind(2,count);\r
-                       st.Step();\r
-                       st.Reset();\r
+                       // TODO - remove after corruption issue fixed\r
+                       if(ll=="8")\r
+                       {\r
+                               std::string dbres=TestDBIntegrity();\r
+                               if(dbres!="ok")\r
+                               {\r
+                                       m_log->trace("ThreadBuilder::Build after delete other TestDBIntegrity returned "+dbres);\r
+                               }\r
+                       }\r
+\r
+                       st4.Bind(0,threadid);\r
+                       st4.Bind(1,(*i).m_messageid);\r
+                       st4.Bind(2,count);\r
+                       st4.Step();\r
+                       st4.Reset();\r
+\r
+                       // TODO - remove after corruption issue fixed\r
+                       if(ll=="8")\r
+                       {\r
+                               std::string dbres=TestDBIntegrity();\r
+                               if(dbres!="ok")\r
+                               {\r
+                                       m_log->trace("ThreadBuilder::Build after insert TestDBIntegrity returned "+dbres);\r
+                               }\r
+                       }\r
                }\r
        }\r
        else\r
        {\r
-               st=m_db->Prepare("DELETE FROM tblThread WHERE ThreadID=?;");\r
-               st.Bind(0,threadid);\r
-               st.Step();\r
+               SQLite3DB::Statement st2=m_db->Prepare("DELETE FROM tblThread WHERE ThreadID=?;");\r
+               st2.Bind(0,threadid);\r
+               st2.Step();\r
+\r
+               m_log->trace("ThreadBuilder::Build deleted thread");\r
+       }\r
+\r
+       // TODO - remove after corruption issue fixed\r
+       if(ll=="8")\r
+       {\r
+               std::string dbres=TestDBIntegrity();\r
+               m_log->trace("ThreadBuilder::Build end TestDBIntegrity returned "+dbres);\r
        }\r
 \r
        return true;\r