version 0.3.29
[fms.git] / src / board.cpp
index e429c6c..9d249ad 100644 (file)
@@ -7,7 +7,7 @@
        #include <xmem.h>\r
 #endif\r
 \r
-Board::Board()\r
+Board::Board(SQLite3DB::DB *db):IDatabase(db)\r
 {\r
        m_boardid=-1;\r
        m_boardname="";\r
@@ -20,17 +20,17 @@ Board::Board()
        m_addedmethod="";\r
 }\r
 \r
-Board::Board(const long boardid)\r
+Board::Board(SQLite3DB::DB *db, const long boardid):IDatabase(db)\r
 {\r
        Load(boardid);  \r
 }\r
 \r
-Board::Board(const std::string &boardname)\r
+Board::Board(SQLite3DB::DB *db, const std::string &boardname):IDatabase(db)\r
 {\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, const std::string &addedmethod)\r
+Board::Board(SQLite3DB::DB *db, 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):IDatabase(db)\r
 {\r
        m_boardid=boardid;\r
        m_boardname=boardname;\r
@@ -58,7 +58,9 @@ const bool Board::Load(const long boardid)
        m_messagecount=0;\r
        m_addedmethod="";\r
 \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
+       // 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
@@ -105,21 +107,6 @@ const bool Board::Load(const long boardid)
 \r
 const bool Board::Load(const std::string &boardname)           // same as loading form boardid - but using name\r
 {\r
-       /*\r
-       SQLite3DB::Statement st=m_db->Prepare("SELECT BoardID FROM tblBoard WHERE BoardName=?;");\r
-       st.Bind(0,boardname);\r
-       st.Step();\r
-       if(st.RowReturned())\r
-       {\r
-               int tempint;\r
-               st.ResultInt(0,tempint);\r
-               return Load(tempint);\r
-       }\r
-       else\r
-       {\r
-               return false;\r
-       }\r
-       */\r
 \r
        // clear current values\r
        m_boardid=-1;\r
@@ -132,7 +119,9 @@ const bool Board::Load(const std::string &boardname)                // same as loading form bo
        int tempint=-1;\r
        m_addedmethod="";\r
 \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
+       // 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
@@ -181,7 +170,6 @@ const bool Board::Load(const std::string &boardname)                // same as loading form bo
 \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 tzdiff=0;\r
        if(Poco::DateTimeParser::tryParse(datestring,m_datecreated,tzdiff)==false)\r
        {\r