From 9b1c0e006f20091f28f3f468cfcab1feb51286bd Mon Sep 17 00:00:00 2001 From: Neo2003 Date: Thu, 2 Oct 2008 16:23:55 -0500 Subject: [svn] * Proper SVN structure --HG-- branch : trunk --- src/shared/Database/SQLStorage.cpp | 191 +++++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 src/shared/Database/SQLStorage.cpp (limited to 'src/shared/Database/SQLStorage.cpp') diff --git a/src/shared/Database/SQLStorage.cpp b/src/shared/Database/SQLStorage.cpp new file mode 100644 index 00000000000..6041eaf282e --- /dev/null +++ b/src/shared/Database/SQLStorage.cpp @@ -0,0 +1,191 @@ +/* + * Copyright (C) 2005-2008 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "SQLStorage.h" +#include "ProgressBar.h" +#include "Log.h" +#include "dbcfile.h" + +#ifdef DO_POSTGRESQL +extern DatabasePostgre WorldDatabase; +#else +extern DatabaseMysql WorldDatabase; +#endif + +const char CreatureInfofmt[]="iiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiisiilliiis"; +const char CreatureDataAddonInfofmt[]="iiiiiiis"; +const char CreatureModelfmt[]="iffbi"; +const char CreatureInfoAddonInfofmt[]="iiiiiiis"; +const char EquipmentInfofmt[]="iiiiiiiiii"; +const char GameObjectInfofmt[]="iiissiifiiiiiiiiiiiiiiiiiiiiiiiis"; +const char ItemPrototypefmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiffiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifsiiiii"; +const char PageTextfmt[]="isi"; +const char SpellThreatfmt[]="ii"; +const char InstanceTemplatefmt[]="iiiiiiffffs"; + +SQLStorage sCreatureStorage(CreatureInfofmt,"entry","creature_template"); +SQLStorage sCreatureDataAddonStorage(CreatureDataAddonInfofmt,"guid","creature_addon"); +SQLStorage sCreatureModelStorage(CreatureModelfmt,"modelid","creature_model_info"); +SQLStorage sCreatureInfoAddonStorage(CreatureInfoAddonInfofmt,"entry","creature_template_addon"); +SQLStorage sEquipmentStorage(EquipmentInfofmt,"entry","creature_equip_template"); +SQLStorage sGOStorage(GameObjectInfofmt,"entry","gameobject_template"); +SQLStorage sItemStorage(ItemPrototypefmt,"entry","item_template"); +SQLStorage sPageTextStore(PageTextfmt,"entry","page_text"); +SQLStorage sSpellThreatStore(SpellThreatfmt,"entry","spell_threat"); +SQLStorage sInstanceTemplate(InstanceTemplatefmt,"map","instance_template"); + +void SQLStorage::Free () +{ + uint32 offset=0; + for(uint32 x=0;xFetch(); + RecordCount=fields[0].GetUInt32(); + delete result; + } + else + RecordCount = 0; + + result = WorldDatabase.PQuery("SELECT * FROM %s",table); + + if(!result) + { + sLog.outError("%s table is empty!\n",table); + RecordCount = 0; + return; + } + + uint32 recordsize=0; + uint32 offset=0; + + if(iNumFields!=result->GetFieldCount()) + { + RecordCount = 0; + sLog.outError("Error in %s table, probably sql file format was updated (there should be %d fields in sql).\n",table,iNumFields); + delete result; + exit(1); // Stop server at loading broken or non-compatiable table. + } + + //get struct size + uint32 sc=0; + uint32 bo=0; + uint32 bb=0; + for(uint32 x=0;xFetch(); + bar.step(); + char *p=(char*)&_data[recordsize*count]; + newIndex[fields[0].GetUInt32()]=p; + + offset=0; + for(uint32 x=0;x0); + offset+=sizeof(bool); + break; + case FT_BYTE: + *((char*)(&p[offset]))=(fields[x].GetUInt8()); + offset+=sizeof(char); + break; + case FT_INT: + *((uint32*)(&p[offset]))=fields[x].GetUInt32(); + offset+=sizeof(uint32); + break; + case FT_FLOAT: + *((float*)(&p[offset]))=fields[x].GetFloat(); + offset+=sizeof(float); + break; + case FT_STRING: + char const* tmp = fields[x].GetString(); + char* st; + if(!tmp) + { + st=new char[1]; + *st=0; + } + else + { + uint32 l=strlen(tmp)+1; + st=new char[l]; + memcpy(st,tmp,l); + } + *((char**)(&p[offset]))=st; + offset+=sizeof(char*); + break; + } + ++count; + }while( result->NextRow() ); + + delete result; + + pIndex =newIndex; + MaxEntry=maxi; + data=_data; +} -- cgit v1.2.3