1 #include "../include/threadbuilder.h"
\r
2 #include "../include/messagethread.h"
\r
4 const bool ThreadBuilder::Build(const long messageid, const long boardid, const bool bydate)
\r
9 std::vector<MessageThread::threadnode> m_threadmessages;
\r
11 mt.Load(messageid,boardid,bydate);
\r
12 m_threadmessages=mt.GetNodes();
\r
14 // find threadid of this thread if it already exists in a thread
\r
15 SQLite3DB::Statement st=m_db->Prepare("SELECT tblThread.ThreadID FROM tblThread INNER JOIN tblThreadPost ON tblThread.ThreadID=tblThreadPost.ThreadID WHERE tblThread.BoardID=? AND tblThreadPost.MessageID=?;");
\r
17 st.Bind(1,messageid);
\r
20 if(st.RowReturned())
\r
22 st.ResultInt(0,threadid);
\r
27 // message doesn't exist in a thread, try to find a message in the thread that is already in a thread
\r
28 for(std::vector<MessageThread::threadnode>::const_iterator i=m_threadmessages.begin(); i!=m_threadmessages.end() && threadid==-1; i++)
\r
31 st.Bind(1,(*i).m_messageid);
\r
34 if(st.RowReturned())
\r
36 st.ResultInt(0,threadid);
\r
43 // thread doesn't exist - create it
\r
46 st=m_db->Prepare("INSERT INTO tblThread(BoardID) VALUES(?);");
\r
49 threadid=st.GetLastInsertRowID();
\r
53 if(m_threadmessages.size()>0)
\r
55 st=m_db->Prepare("UPDATE tblThread SET FirstMessageID=?, LastMessageID=? WHERE ThreadID=?;");
\r
56 st.Bind(0,m_threadmessages[0].m_messageid);
\r
57 st.Bind(1,m_threadmessages[m_threadmessages.size()-1].m_messageid);
\r
58 st.Bind(2,threadid);
\r
61 st=m_db->Prepare("DELETE FROM tblThreadPost WHERE ThreadID=?;");
\r
62 st.Bind(0,threadid);
\r
65 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
68 st=m_db->Prepare("INSERT INTO tblThreadPost(ThreadID,MessageID,PostOrder) VALUES(?,?,?);");
\r
69 for(std::vector<MessageThread::threadnode>::const_iterator i=m_threadmessages.begin(); i!=m_threadmessages.end(); i++, count++)
\r
71 deleteotherst.Bind(0,boardid);
\r
72 deleteotherst.Bind(1,(*i).m_messageid);
\r
73 deleteotherst.Step();
\r
74 deleteotherst.Reset();
\r
76 st.Bind(0,threadid);
\r
77 st.Bind(1,(*i).m_messageid);
\r
85 st=m_db->Prepare("DELETE FROM tblThread WHERE ThreadID=?;");
\r
86 st.Bind(0,threadid);
\r