]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLItemDAO.cpp
Worked on insert/update for MySQLItemDAO
[irc/gameservirc.git] / gameserv-2.0 / libgameservgldl / src / DataLayer / MySQL / MySQLItemDAO.cpp
index 649f4d82f69a970b7eb67af6438d8407b2d7dee6..38f9a0528e5415b60431dd5416943f2037e9d046 100644 (file)
@@ -1,5 +1,6 @@
 #include <GameServ/DataLayer/MySQL/MySQLItemDAO.h>\r
 using GameServ::DataLayer::MySQL::MySQLItemDAO;\r
+using GameServ::DataLayer::MySQL::item;\r
 #include <GameServ/GameLayer/GameObjects/ItemGO.h>\r
 using GameServ::GameLayer::GameObjects::ItemGO;\r
 #include <GameServ/GameLayer/GameObjects/ArmorGO.h>\r
@@ -42,7 +43,7 @@ using std::vector;
 \r
 MySQLItemDAO::MySQLItemDAO()\r
 {\r
-       Initialize("items");\r
+       Initialize("item");\r
 }\r
 \r
 MySQLItemDAO::~MySQLItemDAO()\r
@@ -56,11 +57,22 @@ void MySQLItemDAO::Initialize(const string &tablename)
 \r
 shared_ptr<ItemGO> MySQLItemDAO::GetById(const string &Id) const\r
 {\r
+       // TODO: Enable and catch exceptions\r
        mysqlpp::Connection conn(false);\r
+\r
+       // TODO: Load from config\r
        if (conn.connect("gameserv", "localhost", "gameserv", "gameserv", 3306))\r
        {\r
                mysqlpp::Query query = conn.query();\r
-               query << "select * from items where id = 1";\r
+               try\r
+               {\r
+                       query << "select * from " << mTableName << " where id = " << MySQLId::GetItemNumberFromId(Id);\r
+               }\r
+               catch (GameServException &e)\r
+               {\r
+                       throw DataLayerException(str(format("Error generating sql query: %1%") % e.VerboseError()),\r
+                               __FILE__, __LINE__);\r
+               }\r
                \r
                vector<item> items;\r
                query.storein(items);\r
@@ -85,7 +97,59 @@ shared_ptr<ItemGO> MySQLItemDAO::GetById(const string &Id) const
        }\r
 }\r
 \r
-shared_ptr<ItemGO> MySQLItemDAO::CreateItemFromItemSSQLS(const GameServ::DataLayer::MySQL::item &i) const\r
+\r
+void MySQLItemDAO::Insert(shared_ptr<ItemGO> spItem)\r
+{\r
+       // TODO: Enable and catch exceptions\r
+       mysqlpp::Connection conn(false);\r
+\r
+       // TODO: Load from config\r
+       if (conn.connect("gameserv", "localhost", "gameserv", "gameserv", 3306))\r
+       {\r
+               mysqlpp::Query query = conn.query();\r
+               item i = CreateItemSSQLSFromItem(spItem);\r
+\r
+               i.id = 0;\r
+               query.insert(i);\r
+               query.execute();\r
+               spItem->Id(MySQLId::CreateItemId(query.insert_id()));\r
+               spItem->Number(query.insert_id());\r
+       }\r
+}\r
+\r
+void MySQLItemDAO::Update(shared_ptr<ItemGO> spItem)\r
+{\r
+       // TODO: Enable and catch exceptions\r
+       mysqlpp::Connection conn(false);\r
+       // TODO: Load from config\r
+       if (conn.connect("gameserv", "localhost", "gameserv", "gameserv", 3306))\r
+       {\r
+               mysqlpp::Query query = conn.query();\r
+               item oldrow, newrow = CreateItemSSQLSFromItem(spItem);\r
+               try\r
+               {\r
+                       query << "select * from " << mTableName << " where id = " << MySQLId::GetItemNumberFromId(spItem->Id());\r
+               }\r
+               catch (GameServException &e)\r
+               {\r
+                       throw DataLayerException(str(format("Error generating sql query: %1%") % e.VerboseError()),\r
+                               __FILE__, __LINE__);\r
+               }\r
+\r
+               mysqlpp::StoreQueryResult res = query.store();\r
+               if (res.empty())\r
+               {\r
+                       throw DataLayerException(str(format("Attempt to update a non-existant item. Id: %1%") % spItem->Id()),\r
+                               __FILE__, __LINE__);\r
+               }\r
+               oldrow = res[0];\r
+\r
+               query.update(oldrow, newrow);\r
+               query.execute();\r
+       }\r
+}\r
+\r
+shared_ptr<ItemGO> MySQLItemDAO::CreateItemFromItemSSQLS(const item &i) const\r
 {\r
        shared_ptr<ItemGO> spItem;\r
 \r
@@ -106,8 +170,8 @@ shared_ptr<ItemGO> MySQLItemDAO::CreateItemFromItemSSQLS(const GameServ::DataLay
        default:\r
                throw DataLayerException(str(format("Invalid item type %1%") % i.type));\r
        }\r
-       spItem->Id(i.id);\r
-       spItem->Number(MySQLId::GetItemNumberFromId(i.id));\r
+\r
+       spItem->Id(MySQLId::CreateItemId(i.id));\r
        spItem->Name(i.name);\r
        spItem->Uses(i.startinguses);\r
        map<Modifiers::Modifier, Range<int> > modifiers;\r
@@ -126,6 +190,35 @@ shared_ptr<ItemGO> MySQLItemDAO::CreateItemFromItemSSQLS(const GameServ::DataLay
 \r
        return spItem;\r
 }\r
+item MySQLItemDAO::CreateItemSSQLSFromItem(shared_ptr<ItemGO> spItem) const\r
+{\r
+       item i;\r
+       i.name = spItem->Name();\r
+       map<Modifiers::Modifier, Range<int> > modifiers = spItem->Modifiers();\r
+       i.strengthhigh = modifiers[Modifiers::strength].High();\r
+       i.strengthlow = modifiers[Modifiers::strength].Low();\r
+       i.defensehigh = modifiers[Modifiers::defense].High();\r
+       i.defenselow = modifiers[Modifiers::defense].Low();\r
+       i.healthhigh = modifiers[Modifiers::health].High();\r
+       i.healthlow = modifiers[Modifiers::health].Low();\r
+       i.goldhigh = modifiers[Modifiers::gold].High();\r
+       i.goldlow = modifiers[Modifiers::gold].Low();\r
+       i.experiencehigh = modifiers[Modifiers::experience].High();\r
+       i.experiencelow = modifiers[Modifiers::experience].Low();\r
+       i.bankhigh = modifiers[Modifiers::bank].High();\r
+       i.banklow = modifiers[Modifiers::bank].Low();\r
+       i.forestfightshigh = modifiers[Modifiers::forestfights].High();\r
+       i.forestfightslow = modifiers[Modifiers::forestfights].Low();\r
+       i.playerfightshigh = modifiers[Modifiers::playerfights].High();\r
+       i.playerfightslow = modifiers[Modifiers::playerfights].Low();\r
+       i.maxhealthhigh = modifiers[Modifiers::maxhealth].High();\r
+       i.maxhealthlow = modifiers[Modifiers::maxhealth].Low();\r
+\r
+       i.type = ItemTypes::GetName(spItem->Type());\r
+       i.startinguses = spItem->Uses();\r
+\r
+       return i;\r
+}\r
 \r
 bool MySQLItemDAO::IdExists(const std::string &Id) const\r
 {\r