#include "../include/board.h"\r
#include "../include/stringfunctions.h"\r
\r
+#include <Poco/DateTimeParser.h>\r
+\r
#ifdef XMEM\r
#include <xmem.h>\r
#endif\r
m_boardid=-1;\r
m_boardname="";\r
m_boarddescription="";\r
- m_datecreated.Set(1970,1,1);\r
+ m_datecreated.assign(1970,1,1);\r
m_lowmessageid=0;\r
m_highmessageid=0;\r
m_messagecount=0;\r
m_savereceivedmessages=true;\r
+ m_addedmethod="";\r
}\r
\r
Board::Board(const long boardid)\r
Load(boardname);\r
}\r
\r
-Board::Board(const long boardid, const std::string &boardname, const std::string &boarddescription, const std::string datecreated, const long lowmessageid, const long highmessageid, const long messagecount, const bool savereceivedmessages)\r
+Board::Board(const long boardid, const std::string &boardname, const std::string &boarddescription, const std::string datecreated, const long lowmessageid, const long highmessageid, const long messagecount, const bool savereceivedmessages, const std::string &addedmethod)\r
{\r
m_boardid=boardid;\r
m_boardname=boardname;\r
m_highmessageid=highmessageid;\r
m_messagecount=messagecount;\r
m_savereceivedmessages=savereceivedmessages;\r
+ m_addedmethod=addedmethod;\r
\r
SetDateFromString(datecreated);\r
\r
m_boardid=-1;\r
m_boardname="";\r
m_boarddescription="";\r
- m_datecreated.Set(1970,1,1);\r
+ m_datecreated.assign(1970,1,1);\r
m_lowmessageid=0;\r
m_highmessageid=0;\r
m_messagecount=0;\r
+ m_addedmethod="";\r
\r
- SQLite3DB::Statement st=m_db->Prepare("SELECT BoardName, BoardDescription, DateAdded, HighMessageID, LowMessageID, MessageCount, SaveReceivedMessages FROM tblBoard LEFT JOIN vwBoardStats ON tblBoard.BoardID=vwBoardStats.BoardID WHERE tblBoard.BoardID=?;");\r
+ // Optimize query by not using vwBoardStats\r
+ //SQLite3DB::Statement st=m_db->Prepare("SELECT BoardName, BoardDescription, DateAdded, HighMessageID, LowMessageID, MessageCount, SaveReceivedMessages, AddedMethod FROM tblBoard LEFT JOIN vwBoardStats ON tblBoard.BoardID=vwBoardStats.BoardID WHERE tblBoard.BoardID=?;");\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT BoardName, BoardDescription, DateAdded, IFNULL(MAX(MessageID),'0') AS HighMessageID, IFNULL(MIN(MessageID),'0') AS LowMessageID, COUNT(MessageID) AS MessageCount, SaveReceivedMessages, AddedMethod FROM tblBoard LEFT JOIN tblMessageBoard ON tblBoard.BoardID=tblMessageBoard.BoardID WHERE tblBoard.BoardID=? AND (MessageID IS NULL OR MessageID>=0);");\r
st.Bind(0,boardid);\r
st.Step();\r
\r
{\r
m_savereceivedmessages=false;\r
}\r
+ st.ResultText(7,m_addedmethod);\r
\r
return true;\r
}\r
}\r
}\r
\r
-const bool Board::Load(const std::string &boardname)\r
+const bool Board::Load(const std::string &boardname) // same as loading form boardid - but using name\r
{\r
- SQLite3DB::Statement st=m_db->Prepare("SELECT BoardID FROM tblBoard WHERE BoardName=?;");\r
+\r
+ // clear current values\r
+ m_boardid=-1;\r
+ m_boardname="";\r
+ m_boarddescription="";\r
+ m_datecreated.assign(1970,1,1);\r
+ m_lowmessageid=0;\r
+ m_highmessageid=0;\r
+ m_messagecount=0;\r
+ int tempint=-1;\r
+ m_addedmethod="";\r
+\r
+ // Optimize query by not using vwBoardStats\r
+ //SQLite3DB::Statement st=m_db->Prepare("SELECT BoardName, BoardDescription, DateAdded, HighMessageID, LowMessageID, MessageCount, SaveReceivedMessages, tblBoard.BoardID, AddedMethod FROM tblBoard LEFT JOIN vwBoardStats ON tblBoard.BoardID=vwBoardStats.BoardID WHERE tblBoard.BoardName=?;");\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT BoardName, BoardDescription, DateAdded, IFNULL(MAX(MessageID),'0') AS HighMessageID, IFNULL(MIN(MessageID),'0') AS LowMessageID, COUNT(MessageID) AS MessageCount, SaveReceivedMessages, tblBoard.BoardID, AddedMethod FROM tblBoard LEFT JOIN tblMessageBoard ON tblBoard.BoardID=tblMessageBoard.BoardID WHERE tblBoard.BoardName=? AND (MessageID IS NULL OR MessageID>=0);");\r
st.Bind(0,boardname);\r
st.Step();\r
+\r
if(st.RowReturned())\r
{\r
int tempint;\r
- st.ResultInt(0,tempint);\r
- return Load(tempint);\r
+ std::string tempstr;\r
+ std::vector<std::string> dateparts;\r
+\r
+ st.ResultText(0,m_boardname);\r
+ st.ResultText(1,m_boarddescription);\r
+ st.ResultText(2,tempstr);\r
+ st.ResultInt(7,tempint); // boardid\r
+ m_boardid=tempint;\r
+\r
+ SetDateFromString(tempstr);\r
+\r
+ tempint=0;\r
+ st.ResultInt(3,tempint);\r
+ m_highmessageid=tempint;\r
+ tempint=0;\r
+ st.ResultInt(4,tempint);\r
+ m_lowmessageid=tempint;\r
+ tempint=0;\r
+ st.ResultInt(5,tempint);\r
+ m_messagecount=tempint;\r
+ st.ResultText(6,tempstr);\r
+ if(tempstr=="true")\r
+ {\r
+ m_savereceivedmessages=true;\r
+ }\r
+ else\r
+ {\r
+ m_savereceivedmessages=false;\r
+ }\r
+ st.ResultText(8,m_addedmethod);\r
+\r
+ return true;\r
}\r
else\r
{\r
return false;\r
}\r
+\r
}\r
\r
void Board::SetDateFromString(const std::string &datestring)\r
{\r
- // break out date created - date should be in format yyyy-mm-dd HH:MM:SS, so we split on "-", " " (space), and ":"\r
- int tempint=0;\r
- std::vector<std::string> dateparts;\r
- StringFunctions::SplitMultiple(datestring,"- :",dateparts);\r
- if(dateparts.size()>0)\r
- {\r
- StringFunctions::Convert(dateparts[0],tempint);\r
- m_datecreated.SetYear(tempint);\r
- }\r
- if(dateparts.size()>1)\r
- {\r
- StringFunctions::Convert(dateparts[1],tempint);\r
- m_datecreated.SetMonth(tempint);\r
- }\r
- if(dateparts.size()>2)\r
- {\r
- StringFunctions::Convert(dateparts[2],tempint);\r
- m_datecreated.SetDay(tempint);\r
- }\r
- if(dateparts.size()>3)\r
- {\r
- StringFunctions::Convert(dateparts[3],tempint);\r
- m_datecreated.SetHour(tempint);\r
- }\r
- if(dateparts.size()>4)\r
- {\r
- StringFunctions::Convert(dateparts[4],tempint);\r
- m_datecreated.SetMinute(tempint);\r
- }\r
- if(dateparts.size()>5)\r
+ int tzdiff=0;\r
+ if(Poco::DateTimeParser::tryParse(datestring,m_datecreated,tzdiff)==false)\r
{\r
- StringFunctions::Convert(dateparts[5],tempint);\r
- m_datecreated.SetSecond(tempint);\r
+ m_log->error("Board::SetDateFromString could not parse date "+datestring);\r
}\r
}\r