/* /\/\ __ _ _ __ __ _ ___ / _\ ___ _ __(_)_ __ | |_ * / \ / _` | '_ \ / _` |/ _ \\ \ / __| '__| | '_ \| __| * / /\/\ \ (_| | | | | (_| | (_) |\ \ (__| | | | |_) | |_ * \/ \/\__,_|_| |_|\__, |\___/\__/\___|_| |_| .__/ \__| * |___/ |_| * A WHOLE NEW WORLD * MangoScript - Bringing a whole new world to MaNGOS * * Lua_Database.cpp - Exports misc related functions to LUA * * (c) Copyright 2006-2007 by the By the MangoScript Team * * 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 * * $Id: Lua_Database.cpp 129 2007-02-23 16:43:15Z andrejkw $ */ #include "Lua_Database.h" #include "Lua_uint64.h" #include "Database/DatabaseEnv.h" #include "Database/Database.h" #include "Database/impl/MySQLDatabase.h" /*#include "Database/impl/PostgreDatabase.h"*/ /* Functions for QueryResult */ lua_uint64 lb_QueryResult_GetRowCount_u64(QueryResult* qr) { return lua_uint64(qr->GetRowCount()); } luabind::object lb_QueryResult_Fetch(lua_State* L, QueryResult* qr) { Field* fields = qr->Fetch(); luabind::object lua_fields = luabind::newtable(L); for (int x = 0; x < qr->GetFieldCount(); x++) lua_fields[x] = &fields[x]; return lua_fields; } /* Functions for Field */ lua_uint64 lb_Field_GetUInt64(Field* f) { return lua_uint64(f->GetUInt64()); } /* Functions for SpellEntry */ uint32 lb_SpellEntry_Totem(SpellEntry se, uint8 i) { return ((i <= 2) ? se.Totem[i] : 0); } uint32 lb_SpellEntry_Reagent(SpellEntry se, uint8 i) { return ((i <= 8) ? se.Reagent[i] : 0); } uint32 lb_SpellEntry_ReagentCount(SpellEntry se, uint8 i) { return ((i <= 8) ? se.ReagentCount[i] : 0); } uint32 lb_SpellEntry_Effect(SpellEntry se, uint8 i) { return ((i <= 3) ? se.Effect[i] : 0); } uint32 lb_SpellEntry_EffectImplicitTargetA(SpellEntry se, uint8 i) { return ((i <= 3) ? se.EffectImplicitTargetA[i] : 0); } uint32 lb_SpellEntry_EffectImplicitTargetB(SpellEntry se, uint8 i) { return ((i <= 3) ? se.EffectImplicitTargetB[i] : 0); } /* Functions for Database */ /*Database*__w64 lb_sDatabase() { return &sDatabase; } Database*__w64 lb_loginDatabase() { return &loginDatabase; }*/ Database* lb_sDatabase() { return &sDatabase; } Database* lb_loginDatabase() { return &loginDatabase; } void lb_QueryResult_Free(QueryResult* res) { if (res) delete res; } /*Database* lb_OpenMysqlConnection(const char* loginInformation)*/ MySQLDatabase* lb_OpenMysqlConnection(const char* Hostname, unsigned int port, const char* Username, const char* Password, const char* DatabaseName, uint32 ConnectionCount, uint32 BufferSize) { MySQLDatabase* db = new MySQLDatabase(); //if (!db->Initialize(loginInformation, DATABASE_TYPE_MYSQL)) if (!db->Initialize(Hostname, port, Username, Password, DatabaseName, ConnectionCount, BufferSize)) return NULL; else return db; } void lb_Database_Close(Database* db) { if ((db) && (db != &sDatabase) && (db != &loginDatabase)) delete db; } /* Functions for DBCStorage */ DBCStorage * lb_sSpellStore() { return &sSpellStore; } DBCStorage * lb_sCastTimesStore() { return &sCastTimesStore; } int lb_Export_Database(lua_State* L) { using namespace luabind; /* Lua (Database) Global Functions */ module(L) [ def("sDatabase", &lb_sDatabase), def("loginDatabase", &lb_loginDatabase), def("sSpellStore", &lb_sSpellStore), def("sCastTimesStore", &lb_sCastTimesStore), def("OpenMysqlConnection", &lb_OpenMysqlConnection), def("GetDuration", &GetDuration), def("GetMaxDuration", &GetMaxDuration), /* def("IsRankSpellDueToSpell", &IsRankSpellDueToSpell), def("IsNoStackSpellDueToSpell", &IsNoStackSpellDueToSpell), */ def("IsNoStackAuraDueToAura", &IsNoStackAuraDueToAura), def("CompareAuraRanks", &CompareAuraRanks), def("IsSpellSingleEffectPerCaster", &IsSpellSingleEffectPerCaster), def("IsPassiveSpell", &IsPassiveSpell), def("IsPositiveSpell", &IsPositiveSpell), def("IsPositiveEffect", &IsPositiveEffect), def("IsSingleTarget", &IsSingleTarget), def("CanUsedWhileStealthed", &CanUsedWhileStealthed) ]; /* From MySQLDatabase.h */ module(L) [ class_("MySQLDatabase") /*.def("Close", &lb_Database_Close)*/ /*.def("PQuery", &MySQLDatabase::PQuery)*/ /*.def("Query", &MySQLDatabase::Query) .def("Execute", &MySQLDatabase::Execute)*/ /*.def("PExecute", &MySQLDatabase::PExecute) .def("BeginTransaction", &MySQLDatabase::StartTransaction) .def("CommitTransaction", &MySQLDatabase::CommitTransaction) .def("RollbackTransaction", &MySQLDatabase::RollbackTransaction)*/ /*.def("escape_string", (void (MySQLDatabase::*)(std::string&))&MySQLDatabase::escape_string)*/ /*.def("ThreadStart", &MySQLDatabase::ThreadStart) .def("ThreadEnd", &MySQLDatabase::ThreadEnd)*/ ]; /* From Database.h */ module(L) [ class_("Database") /*.def("Close", &lb_Database_Close)*/ /*.def("PQuery", &Database::PQuery)*/ /*.def("Query", &Database::Query) .def("Execute", &Database::Execute)*/ /*.def("PExecute", &Database::PExecute) .def("BeginTransaction", &Database::StartTransaction) .def("CommitTransaction", &Database::CommitTransaction) .def("RollbackTransaction", &Database::RollbackTransaction)*/ .def("escape_string", (void (Database::*)(std::string&))&Database::escape_string) /*.def("ThreadStart", &Database::ThreadStart) .def("ThreadEnd", &Database::ThreadEnd)*/ ]; /* From Field.h */ module(L) [ class_("Field") .def(constructor<>()) .def(constructor()) .def(constructor()) .def("GetName", &Field::GetName) .def("GetType", &Field::GetType) .def("GetString", &Field::GetString) .def("GetFloat", &Field::GetFloat) .def("GetInt32", &Field::GetInt32) .def("GetUInt8", &Field::GetUInt8) .def("GetUInt16", &Field::GetUInt16) .def("GetUInt32", &Field::GetUInt16) .def("GetUInt64", &lb_Field_GetUInt64) .def("SetName", &Field::SetName) .def("SetType", &Field::SetType) .def("SetValue", &Field::SetValue) ]; /* From QueryResult.h */ module(L) [ class_("QueryResult") /*.def(constructor)())*/ .def("NextRow", &QueryResult::NextRow) .def("Free", &lb_QueryResult_Free) .def("Fetch", &lb_QueryResult_Fetch, raw(_1)) .def("GetFieldCount", &QueryResult::GetFieldCount) .def("GetRowCount", (uint32 (QueryResult::*)(void))&QueryResult::GetRowCount) .def("GetRowCount_u64", &lb_QueryResult_GetRowCount_u64) ]; /* From DBCStructure.h */ // TODO: need to export more information for SpellEntry // TODO: maybe (if possible) simplify the way DBCStorage is exported module(L) [ class_("SpellEntry") .def_readonly("Id", &SpellEntry::Id) .def_readonly("School", &SpellEntry::School) .def_readonly("Category", &SpellEntry::Category) .def_readonly("Dispel", &SpellEntry::Dispel) .def_readonly("Mechanic", &SpellEntry::Mechanic) .def_readonly("Attributes", &SpellEntry::Attributes) //... .def_readonly("Stances", &SpellEntry::Stances) .def_readonly("Targets", &SpellEntry::Targets) .def_readonly("TargetCreatureType", &SpellEntry::TargetCreatureType) .def_readonly("RequiresSpellFocus", &SpellEntry::RequiresSpellFocus) .def_readonly("CasterAuraState", &SpellEntry::CasterAuraState) .def_readonly("CastingTimeIndex", &SpellEntry::CastingTimeIndex) .def_readonly("RecoveryTime", &SpellEntry::RecoveryTime) .def_readonly("CategoryRecoveryTime", &SpellEntry::CategoryRecoveryTime) .def_readonly("InterruptFlags", &SpellEntry::InterruptFlags) //... .def("Totem", &lb_SpellEntry_Totem) .def("Reagent", &lb_SpellEntry_Reagent) .def("ReagentCount", &lb_SpellEntry_ReagentCount) .def_readonly("EquippedItemClass", &SpellEntry::EquippedItemClass) .def_readonly("EquippedItemSubClassMask", &SpellEntry::EquippedItemSubClassMask) .def_readonly("EquippedItemInventoryTypeMask", &SpellEntry::EquippedItemInventoryTypeMask) .def("Effect", &lb_SpellEntry_Effect) //... .def("EffectImplicitTargetA", &lb_SpellEntry_EffectImplicitTargetA) .def("EffectImplicitTargetB", &lb_SpellEntry_EffectImplicitTargetB), // Export for DBCStorage with SpellEntry class_ >("DBCStorage") .def("LookupEntry", &DBCStorage::LookupEntry) .def("GetNumRows", &DBCStorage::GetNumRows) .def("Load", &DBCStorage::Load) .def("Clear", &DBCStorage::Clear) ]; module(L) [ class_("SpellCastTimesEntry") .def_readonly("ID", &SpellCastTimesEntry::ID) .def_readonly("CastTime", &SpellCastTimesEntry::CastTime), // Export for DBCStorage with SpellCastTimesEntry class_ >("DBCStorage") .def("LookupEntry", &DBCStorage::LookupEntry) .def("GetNumRows", &DBCStorage::GetNumRows) .def("Load", &DBCStorage::Load) .def("Clear", &DBCStorage::Clear) ]; return 0; }