mirror of
https://github.com/azerothcore/mod-ale
synced 2025-11-29 15:38:17 +08:00
Eluna: Implement utility GetRow()
This commit is contained in:
236
ElunaQueryMethods.h
Normal file
236
ElunaQueryMethods.h
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2010 - 2014 Eluna Lua Engine <http://emudevs.com/>
|
||||||
|
* This program is free software licensed under GPL version 3
|
||||||
|
* Please see the included DOCS/LICENSE.md for more information
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef QUERYMETHODS_H
|
||||||
|
#define QUERYMETHODS_H
|
||||||
|
|
||||||
|
#ifndef TRINITY
|
||||||
|
#define RESULT result
|
||||||
|
#else
|
||||||
|
#define RESULT (*result)
|
||||||
|
#endif
|
||||||
|
namespace LuaQuery
|
||||||
|
{
|
||||||
|
/* BOOLEAN */
|
||||||
|
int IsNull(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
#ifndef TRINITY
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].IsNULL());
|
||||||
|
#else
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].IsNull());
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* GETTERS */
|
||||||
|
int GetColumnCount(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
Eluna::Push(L, RESULT->GetFieldCount());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetRowCount(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
if (RESULT->GetRowCount() > (uint32)-1)
|
||||||
|
Eluna::Push(L, (uint32)-1);
|
||||||
|
else
|
||||||
|
Eluna::Push(L, RESULT->GetRowCount());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetBool(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetBool());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetUInt8(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetUInt8());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetUInt16(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetUInt16());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetUInt32(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetUInt32());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetUInt64(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetUInt64());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetInt8(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetInt8());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetInt16(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetInt16());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetInt32(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetInt32());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetInt64(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetInt64());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetFloat(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetFloat());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetDouble(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetDouble());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetString(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
#ifndef TRINITY
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetCppString());
|
||||||
|
#else
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetString());
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetCString(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
||||||
|
if (col < RESULT->GetFieldCount())
|
||||||
|
#ifndef TRINITY
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetString());
|
||||||
|
#else
|
||||||
|
Eluna::Push(L, RESULT->Fetch()[col].GetCString());
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* OTHER */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Advances the ElunaQuery to the next row in the result returned.
|
||||||
|
* Returns false if there was no new row, otherwise true.
|
||||||
|
*
|
||||||
|
* @return bool hadNextRow
|
||||||
|
*/
|
||||||
|
int NextRow(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
Eluna::Push(L, RESULT->NextRow());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a table from the current row where keys are field names and values are the row's values.
|
||||||
|
* All numerical values will be numbers and everything else is returned as a string.
|
||||||
|
* For example `SELECT entry, name FROM creature_template` would result in a table of `{ entry = 123, name = "some creature name" }`
|
||||||
|
* To move to next row see [ElunaQuery:NextRow]
|
||||||
|
*
|
||||||
|
* @return table rowData : table filled with row columns and data where `T[column] = data`
|
||||||
|
*/
|
||||||
|
int GetRow(lua_State* L, ElunaQuery* result)
|
||||||
|
{
|
||||||
|
lua_newtable(L);
|
||||||
|
int tbl = lua_gettop(L);
|
||||||
|
|
||||||
|
uint32 col = RESULT->GetFieldCount();
|
||||||
|
Field* row = RESULT->Fetch();
|
||||||
|
|
||||||
|
#ifndef TRINITY
|
||||||
|
const QueryFieldNames& names = RESULT->GetFieldNames();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (uint32 i = 0; i < col; ++i)
|
||||||
|
{
|
||||||
|
#ifdef TRINITY
|
||||||
|
Eluna::Push(L, RESULT->GetFieldName(i));
|
||||||
|
|
||||||
|
const char* str = row[i].GetCString();
|
||||||
|
if (row[i].IsNull() || !str)
|
||||||
|
Eluna::Push(L);
|
||||||
|
#else
|
||||||
|
Eluna::Push(L, names[i]);
|
||||||
|
|
||||||
|
const char* str = row[i].GetString();
|
||||||
|
if (row[i].IsNULL() || !str)
|
||||||
|
Eluna::Push(L);
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// MYSQL_TYPE_LONGLONG Interpreted as string for lua
|
||||||
|
switch (row[i].GetType())
|
||||||
|
{
|
||||||
|
case MYSQL_TYPE_TINY:
|
||||||
|
case MYSQL_TYPE_SHORT:
|
||||||
|
case MYSQL_TYPE_INT24:
|
||||||
|
case MYSQL_TYPE_LONG:
|
||||||
|
case MYSQL_TYPE_FLOAT:
|
||||||
|
case MYSQL_TYPE_DOUBLE:
|
||||||
|
Eluna::Push(L, strtod(str, NULL));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Eluna::Push(L, str);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_settable(L, tbl);
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_settop(L, tbl);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#undef RESULT
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -27,13 +27,11 @@ template<typename T>
|
|||||||
class ElunaTemplate
|
class ElunaTemplate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static const char* tname = NULL;
|
static const char* tname;
|
||||||
static bool manageMemory = false;
|
static bool manageMemory;
|
||||||
|
|
||||||
static int typeT(lua_State* L)
|
static int typeT(lua_State* L)
|
||||||
{
|
{
|
||||||
ASSERT(tname);
|
|
||||||
|
|
||||||
lua_pushstring(L, tname);
|
lua_pushstring(L, tname);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -44,7 +42,7 @@ public:
|
|||||||
// that will only be needed on lua side and will not be managed by TC/mangos/<core>
|
// that will only be needed on lua side and will not be managed by TC/mangos/<core>
|
||||||
static void Register(lua_State* L, const char* name, bool gc = false)
|
static void Register(lua_State* L, const char* name, bool gc = false)
|
||||||
{
|
{
|
||||||
ASSERT(!tname);
|
ASSERT(!tname || name);
|
||||||
|
|
||||||
tname = name;
|
tname = name;
|
||||||
manageMemory = gc;
|
manageMemory = gc;
|
||||||
@@ -90,8 +88,6 @@ public:
|
|||||||
template<typename C>
|
template<typename C>
|
||||||
static void SetMethods(lua_State* L, ElunaRegister<C>* methodTable)
|
static void SetMethods(lua_State* L, ElunaRegister<C>* methodTable)
|
||||||
{
|
{
|
||||||
ASSERT(tname);
|
|
||||||
|
|
||||||
if (!methodTable)
|
if (!methodTable)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -126,8 +122,6 @@ public:
|
|||||||
// Remember special case ElunaTemplate<Vehicle>::gcT
|
// Remember special case ElunaTemplate<Vehicle>::gcT
|
||||||
static int gcT(lua_State* L)
|
static int gcT(lua_State* L)
|
||||||
{
|
{
|
||||||
ASSERT(tname);
|
|
||||||
|
|
||||||
if (!manageMemory)
|
if (!manageMemory)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@@ -140,8 +134,6 @@ public:
|
|||||||
|
|
||||||
static int push(lua_State* L, T const* obj)
|
static int push(lua_State* L, T const* obj)
|
||||||
{
|
{
|
||||||
ASSERT(tname);
|
|
||||||
|
|
||||||
if (!obj)
|
if (!obj)
|
||||||
{
|
{
|
||||||
lua_pushnil(L);
|
lua_pushnil(L);
|
||||||
@@ -196,8 +188,6 @@ public:
|
|||||||
|
|
||||||
static T* check(lua_State* L, int narg, bool error = true)
|
static T* check(lua_State* L, int narg, bool error = true)
|
||||||
{
|
{
|
||||||
ASSERT(tname);
|
|
||||||
|
|
||||||
T** ptrHold = static_cast<T**>(lua_touserdata(L, narg));
|
T** ptrHold = static_cast<T**>(lua_touserdata(L, narg));
|
||||||
if (!ptrHold)
|
if (!ptrHold)
|
||||||
{
|
{
|
||||||
@@ -239,8 +229,6 @@ public:
|
|||||||
|
|
||||||
static int thunk(lua_State* L)
|
static int thunk(lua_State* L)
|
||||||
{
|
{
|
||||||
ASSERT(tname);
|
|
||||||
|
|
||||||
T* obj = Eluna::CHECKOBJ<T>(L, 1); // get self
|
T* obj = Eluna::CHECKOBJ<T>(L, 1); // get self
|
||||||
if (!obj)
|
if (!obj)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -259,8 +247,6 @@ public:
|
|||||||
|
|
||||||
static int tostringT(lua_State* L)
|
static int tostringT(lua_State* L)
|
||||||
{
|
{
|
||||||
ASSERT(tname);
|
|
||||||
|
|
||||||
T* obj = Eluna::CHECKOBJ<T>(L, 1); // get self
|
T* obj = Eluna::CHECKOBJ<T>(L, 1); // get self
|
||||||
if (obj)
|
if (obj)
|
||||||
lua_pushfstring(L, "%s: (%p)", tname, obj);
|
lua_pushfstring(L, "%s: (%p)", tname, obj);
|
||||||
|
|||||||
@@ -10,14 +10,17 @@
|
|||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "SharedDefines.h"
|
#include "SharedDefines.h"
|
||||||
#ifdef TRINITY
|
#ifdef TRINITY
|
||||||
|
#include "QueryResult.h"
|
||||||
#ifdef CATA
|
#ifdef CATA
|
||||||
#include "Object.h"
|
#include "Object.h"
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#include "ObjectGuid.h"
|
#include "ObjectGuid.h"
|
||||||
|
#include "Database/QueryResult.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TRINITY
|
#ifdef TRINITY
|
||||||
|
typedef QueryResult ElunaQuery;
|
||||||
#ifndef CATA
|
#ifndef CATA
|
||||||
typedef uint64 ObjectGuid;
|
typedef uint64 ObjectGuid;
|
||||||
#endif
|
#endif
|
||||||
@@ -26,6 +29,7 @@ typedef uint64 ObjectGuid;
|
|||||||
#define ELUNA_LOG_DEBUG(...) TC_LOG_DEBUG("eluna", __VA_ARGS__);
|
#define ELUNA_LOG_DEBUG(...) TC_LOG_DEBUG("eluna", __VA_ARGS__);
|
||||||
#define GET_GUID GetGUID
|
#define GET_GUID GetGUID
|
||||||
#else
|
#else
|
||||||
|
typedef QueryNamedResult ElunaQuery;
|
||||||
#define MAKE_NEW_GUID(l, e, h) ObjectGuid(h, e, l)
|
#define MAKE_NEW_GUID(l, e, h) ObjectGuid(h, e, l)
|
||||||
#define GUID_ENPART(guid) ObjectGuid(guid).GetEntry()
|
#define GUID_ENPART(guid) ObjectGuid(guid).GetEntry()
|
||||||
#define GUID_LOPART(guid) ObjectGuid(guid).GetCounter()
|
#define GUID_LOPART(guid) ObjectGuid(guid).GetCounter()
|
||||||
|
|||||||
@@ -629,19 +629,20 @@ namespace LuaGlobalFunctions
|
|||||||
{
|
{
|
||||||
const char* query = Eluna::CHECKVAL<const char*>(L, 1);
|
const char* query = Eluna::CHECKVAL<const char*>(L, 1);
|
||||||
|
|
||||||
QueryResult* result = NULL;
|
#ifdef TRINITY
|
||||||
#ifndef TRINITY
|
ElunaQuery result = WorldDatabase.Query(query);
|
||||||
result = WorldDatabase.Query(query);
|
if (result)
|
||||||
|
Eluna::Push(L, new ElunaQuery(result));
|
||||||
|
else
|
||||||
|
Eluna::Push(L);
|
||||||
#else
|
#else
|
||||||
QueryResult res = WorldDatabase.Query(query);
|
ElunaQuery* result = WorldDatabase.QueryNamed(query);
|
||||||
if (res)
|
if (result)
|
||||||
result = new QueryResult(res);
|
Eluna::Push(L, result);
|
||||||
|
else
|
||||||
|
Eluna::Push(L);
|
||||||
#endif
|
#endif
|
||||||
if (result)
|
return 1;
|
||||||
Eluna::Push(L, result);
|
|
||||||
else
|
|
||||||
Eluna::Push(L);
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int WorldDBExecute(lua_State* L)
|
int WorldDBExecute(lua_State* L)
|
||||||
@@ -655,19 +656,20 @@ namespace LuaGlobalFunctions
|
|||||||
{
|
{
|
||||||
const char* query = Eluna::CHECKVAL<const char*>(L, 1);
|
const char* query = Eluna::CHECKVAL<const char*>(L, 1);
|
||||||
|
|
||||||
QueryResult* result = NULL;
|
#ifdef TRINITY
|
||||||
#ifndef TRINITY
|
QueryResult result = CharacterDatabase.Query(query);
|
||||||
result = CharacterDatabase.Query(query);
|
if (result)
|
||||||
|
Eluna::Push(L, new QueryResult(result));
|
||||||
|
else
|
||||||
|
Eluna::Push(L);
|
||||||
#else
|
#else
|
||||||
QueryResult res = CharacterDatabase.Query(query);
|
QueryNamedResult* result = CharacterDatabase.QueryNamed(query);
|
||||||
if (res)
|
if (result)
|
||||||
result = new QueryResult(res);
|
Eluna::Push(L, result);
|
||||||
|
else
|
||||||
|
Eluna::Push(L);
|
||||||
#endif
|
#endif
|
||||||
if (result)
|
return 1;
|
||||||
Eluna::Push(L, result);
|
|
||||||
else
|
|
||||||
Eluna::Push(L);
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int CharDBExecute(lua_State* L)
|
int CharDBExecute(lua_State* L)
|
||||||
@@ -679,20 +681,21 @@ namespace LuaGlobalFunctions
|
|||||||
|
|
||||||
int AuthDBQuery(lua_State* L)
|
int AuthDBQuery(lua_State* L)
|
||||||
{
|
{
|
||||||
const char* query = Eluna::CHECKVAL<const char*>(L, 1);
|
const char* query = Eluna::CHECKVAL<const char*>(L, 1);
|
||||||
|
|
||||||
QueryResult* result = NULL;
|
#ifdef TRINITY
|
||||||
#ifndef TRINITY
|
QueryResult result = LoginDatabase.Query(query);
|
||||||
result = LoginDatabase.Query(query);
|
if (result)
|
||||||
|
Eluna::Push(L, new QueryResult(result));
|
||||||
|
else
|
||||||
|
Eluna::Push(L);
|
||||||
#else
|
#else
|
||||||
QueryResult res = LoginDatabase.Query(query);
|
QueryNamedResult* result = LoginDatabase.QueryNamed(query);
|
||||||
if (res)
|
if (result)
|
||||||
result = new QueryResult(res);
|
Eluna::Push(L, result);
|
||||||
|
else
|
||||||
|
Eluna::Push(L);
|
||||||
#endif
|
#endif
|
||||||
if (result)
|
|
||||||
Eluna::Push(L, result);
|
|
||||||
else
|
|
||||||
Eluna::Push(L);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ extern "C"
|
|||||||
#include "GroupMethods.h"
|
#include "GroupMethods.h"
|
||||||
#include "GuildMethods.h"
|
#include "GuildMethods.h"
|
||||||
#include "GameObjectMethods.h"
|
#include "GameObjectMethods.h"
|
||||||
#include "QueryMethods.h"
|
#include "ElunaQueryMethods.h"
|
||||||
#include "AuraMethods.h"
|
#include "AuraMethods.h"
|
||||||
#include "ItemMethods.h"
|
#include "ItemMethods.h"
|
||||||
#include "WorldPacketMethods.h"
|
#include "WorldPacketMethods.h"
|
||||||
@@ -1081,11 +1081,12 @@ ElunaRegister<Vehicle> VehicleMethods[] =
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ElunaRegister<QueryResult> QueryMethods[] =
|
ElunaRegister<ElunaQuery> QueryMethods[] =
|
||||||
{
|
{
|
||||||
{ "NextRow", &LuaQuery::NextRow }, // :NextRow() - Advances to next rown in the query. Returns true if there is a next row, otherwise false
|
{ "NextRow", &LuaQuery::NextRow }, // :NextRow() - Advances to next rown in the query. Returns true if there is a next row, otherwise false
|
||||||
{ "GetColumnCount", &LuaQuery::GetColumnCount }, // :GetColumnCount() - Gets the column count of the query
|
{ "GetColumnCount", &LuaQuery::GetColumnCount }, // :GetColumnCount() - Gets the column count of the query
|
||||||
{ "GetRowCount", &LuaQuery::GetRowCount }, // :GetRowCount() - Gets the row count of the query
|
{ "GetRowCount", &LuaQuery::GetRowCount }, // :GetRowCount() - Gets the row count of the query
|
||||||
|
{ "GetRow", &LuaQuery::GetRow },
|
||||||
|
|
||||||
{ "GetBool", &LuaQuery::GetBool }, // :GetBool(column) - returns a bool from a number column (for example tinyint)
|
{ "GetBool", &LuaQuery::GetBool }, // :GetBool(column) - returns a bool from a number column (for example tinyint)
|
||||||
{ "GetUInt8", &LuaQuery::GetUInt8 }, // :GetUInt8(column) - returns the value of an unsigned tinyint column
|
{ "GetUInt8", &LuaQuery::GetUInt8 }, // :GetUInt8(column) - returns the value of an unsigned tinyint column
|
||||||
@@ -1318,12 +1319,12 @@ void RegisterFunctions(lua_State* L)
|
|||||||
ElunaTemplate<AuctionHouseObject>::Register(L, "AuctionHouseObject");
|
ElunaTemplate<AuctionHouseObject>::Register(L, "AuctionHouseObject");
|
||||||
ElunaTemplate<AuctionHouseObject>::SetMethods(L, AuctionMethods);
|
ElunaTemplate<AuctionHouseObject>::SetMethods(L, AuctionMethods);
|
||||||
|
|
||||||
|
ElunaTemplate<BattleGround>::Register(L, "BattleGround");
|
||||||
|
ElunaTemplate<BattleGround>::SetMethods(L, BattleGroundMethods);
|
||||||
|
|
||||||
ElunaTemplate<WorldPacket>::Register(L, "WorldPacket", true);
|
ElunaTemplate<WorldPacket>::Register(L, "WorldPacket", true);
|
||||||
ElunaTemplate<WorldPacket>::SetMethods(L, PacketMethods);
|
ElunaTemplate<WorldPacket>::SetMethods(L, PacketMethods);
|
||||||
|
|
||||||
ElunaTemplate<QueryResult>::Register(L, "QueryResult", true);
|
ElunaTemplate<ElunaQuery>::Register(L, "ElunaQuery", true);
|
||||||
ElunaTemplate<QueryResult>::SetMethods(L, QueryMethods);
|
ElunaTemplate<ElunaQuery>::SetMethods(L, QueryMethods);
|
||||||
|
|
||||||
ElunaTemplate<BattleGround>::Register(L, "BattleGround");
|
|
||||||
ElunaTemplate<BattleGround>::SetMethods(L, BattleGroundMethods);
|
|
||||||
}
|
}
|
||||||
|
|||||||
168
QueryMethods.h
168
QueryMethods.h
@@ -1,168 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2010 - 2014 Eluna Lua Engine <http://emudevs.com/>
|
|
||||||
* This program is free software licensed under GPL version 3
|
|
||||||
* Please see the included DOCS/LICENSE.md for more information
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QUERYMETHODS_H
|
|
||||||
#define QUERYMETHODS_H
|
|
||||||
|
|
||||||
#ifndef TRINITY
|
|
||||||
#define RESULT result
|
|
||||||
#else
|
|
||||||
#define RESULT (*result)
|
|
||||||
#endif
|
|
||||||
namespace LuaQuery
|
|
||||||
{
|
|
||||||
/* BOOLEAN */
|
|
||||||
int IsNull(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
#ifndef TRINITY
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].IsNULL());
|
|
||||||
#else
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].IsNull());
|
|
||||||
#endif
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* GETTERS */
|
|
||||||
int GetColumnCount(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
Eluna::Push(L, RESULT->GetFieldCount());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetRowCount(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
if (RESULT->GetRowCount() > (uint32)-1)
|
|
||||||
Eluna::Push(L, (uint32)-1);
|
|
||||||
else
|
|
||||||
Eluna::Push(L, RESULT->GetRowCount());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetBool(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetBool());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetUInt8(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetUInt8());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetUInt16(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetUInt16());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetUInt32(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetUInt32());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetUInt64(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetUInt64());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetInt8(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetInt8());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetInt16(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetInt16());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetInt32(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetInt32());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetInt64(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetInt64());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetFloat(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetFloat());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetDouble(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetDouble());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetString(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
#ifndef TRINITY
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetCppString());
|
|
||||||
#else
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetString());
|
|
||||||
#endif
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetCString(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
uint32 col = Eluna::CHECKVAL<uint32>(L, 2);
|
|
||||||
if (col < RESULT->GetFieldCount())
|
|
||||||
#ifndef TRINITY
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetString());
|
|
||||||
#else
|
|
||||||
Eluna::Push(L, RESULT->Fetch()[col].GetCString());
|
|
||||||
#endif
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* OTHER */
|
|
||||||
int NextRow(lua_State* L, QueryResult* result)
|
|
||||||
{
|
|
||||||
Eluna::Push(L, RESULT->NextRow());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
#undef RESULT
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -122,9 +122,9 @@ if (GetCoreExpansion() >= 2) then
|
|||||||
table.insert(T.Vehicle, "GetEntry")
|
table.insert(T.Vehicle, "GetEntry")
|
||||||
end
|
end
|
||||||
|
|
||||||
T.QueryResult = {}
|
T.ElunaQuery = {}
|
||||||
table.insert(T.QueryResult, "GetColumnCount")
|
table.insert(T.ElunaQuery, "GetColumnCount")
|
||||||
table.insert(T.QueryResult, "GetRowCount")
|
table.insert(T.ElunaQuery, "GetRowCount")
|
||||||
|
|
||||||
T.WorldPacket = {}
|
T.WorldPacket = {}
|
||||||
table.insert(T.WorldPacket, "GetSize")
|
table.insert(T.WorldPacket, "GetSize")
|
||||||
|
|||||||
Reference in New Issue
Block a user