\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 threadid=-1;\r
MessageThread mt(m_db);\r
std::vector<MessageThread::threadnode> m_threadmessages;\r
+ std::string logmessage(""); // temp var to help track down exactly when corruption occurrs\r
+ std::string ll("");\r
+ Option option(m_db);\r
+\r
+ option.Get("LogLevel",ll);\r
\r
mt.Load(messageid,boardid,bydate);\r
m_threadmessages=mt.GetNodes();\r
st.Bind(0,boardid);\r
st.Bind(1,messageid);\r
\r
+ if(ll=="8")\r
+ {\r
+ std::string temp1("");\r
+ std::string temp2("");\r
+ StringFunctions::Convert(boardid,temp1);\r
+ StringFunctions::Convert(messageid,temp2);\r
+\r
+ logmessage+="initial bound boardid=" + temp1 + " messageid=" + temp2 + " | ";\r
+ }\r
+\r
st.Step();\r
if(st.RowReturned())\r
{\r
st.ResultInt(0,threadid);\r
+\r
+ if(ll=="8")\r
+ {\r
+ std::string temp1("");\r
+ StringFunctions::Convert(threadid,temp1);\r
+\r
+ logmessage+="result threadid=" + temp1 + " | ";\r
+ }\r
}\r
else\r
{\r
st.Bind(1,(*i).m_messageid);\r
st.Step();\r
\r
+ if(ll=="8")\r
+ {\r
+ std::string temp1("");\r
+ std::string temp2("");\r
+ StringFunctions::Convert(boardid,temp1);\r
+ StringFunctions::Convert((*i).m_messageid,temp2);\r
+\r
+ logmessage+="find bound boardid=" + temp1 + " messageid=" + temp2 + " | ";\r
+ }\r
+\r
if(st.RowReturned())\r
{\r
st.ResultInt(0,threadid);\r
+ if(ll=="8")\r
+ {\r
+ std::string temp1("");\r
+ StringFunctions::Convert(threadid,temp1);\r
+\r
+ logmessage+="find result threadid=" + temp1 + " | ";\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if(ll=="8")\r
+ {\r
+ std::string temp1("");\r
+ StringFunctions::Convert(threadid,temp1);\r
+\r
+ logmessage+="find not found | ";\r
+ }\r
}\r
\r
st.Reset();\r
\r
}\r
+ st.Finalize();\r
\r
// thread doesn't exist - create it\r
if(threadid==-1)\r
st.Bind(0,boardid);\r
st.Step(true);\r
threadid=st.GetLastInsertRowID();\r
+\r
+ if(ll=="8")\r
+ {\r
+ std::string temp1("");\r
+ std::string temp2("");\r
+ StringFunctions::Convert(boardid,temp1);\r
+ StringFunctions::Convert(threadid,temp2);\r
+\r
+ logmessage+="insert thread bind boardid=" + temp1 + " result threadid=" + temp2 + " | ";\r
+ }\r
+\r
}\r
}\r
\r
st2.Bind(2,threadid);\r
st2.Step();\r
\r
- SQLite3DB::Statement st3=m_db->Prepare("DELETE FROM tblThreadPost WHERE ThreadID=?;");\r
- st3.Bind(0,threadid);\r
- st3.Step();\r
+ if(ll=="8")\r
+ {\r
+ std::string temp1("");\r
+ std::string temp2("");\r
+ std::string temp3("");\r
+ StringFunctions::Convert(m_threadmessages[0].m_messageid,temp1);\r
+ StringFunctions::Convert(m_threadmessages[m_threadmessages.size()-1].m_messageid,temp2);\r
+ StringFunctions::Convert(threadid,temp3);\r
+\r
+ logmessage+="update bind fmessageid=" + temp1 + " lmessageid=" + temp2 + " threadid=" + temp3 + " | ";\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
+ 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.ThreadID<>? AND tblThread.BoardID=? AND tblThreadPost.MessageID=?);");\r
\r
count=0;\r
- SQLite3DB::Statement st4=m_db->Prepare("INSERT INTO tblThreadPost(ThreadID,MessageID,PostOrder) VALUES(?,?,?);");\r
+ SQLite3DB::Statement st4=m_db->Prepare("INSERT OR REPLACE 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
- deleteotherst.Bind(1,(*i).m_messageid);\r
+ deleteotherst.Bind(0,threadid);\r
+ deleteotherst.Bind(1,boardid);\r
+ deleteotherst.Bind(2,(*i).m_messageid);\r
deleteotherst.Step();\r
deleteotherst.Reset();\r
\r
+ if(ll=="8")\r
+ {\r
+ std::string temp1("");\r
+ std::string temp2("");\r
+ StringFunctions::Convert(boardid,temp1);\r
+ StringFunctions::Convert((*i).m_messageid,temp2);\r
+\r
+ logmessage+="deleteother bind boardid=" + temp1 + " messageid=" + temp2 + " | ";\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
+ if(ll=="8")\r
+ {\r
+ std::string temp1("");\r
+ std::string temp2("");\r
+ std::string temp3("");\r
+ StringFunctions::Convert(threadid,temp1);\r
+ StringFunctions::Convert((*i).m_messageid,temp2);\r
+ StringFunctions::Convert(count,temp3);\r
+\r
+ logmessage+="insertthreadpost bind threadid=" + temp1 + " messageid=" + temp2 + " count=" + temp3 + " | ";\r
+ }\r
+\r
}\r
}\r
else\r
st2.Bind(0,threadid);\r
st2.Step();\r
\r
+ if(ll=="8")\r
+ {\r
+ std::string temp1("");\r
+ StringFunctions::Convert(threadid,temp1);\r
+\r
+ logmessage+="delete thread bind threadid=" + temp1 + " | ";\r
+ }\r
+\r
m_log->trace("ThreadBuilder::Build deleted thread");\r
}\r
\r
+ st.Finalize();\r
+\r
m_db->Execute("COMMIT;");\r
\r
+ if(ll=="8")\r
+ {\r
+ m_log->trace(logmessage);\r
+ }\r
+\r
return true;\r
\r
}\r