1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2025-02-21 20:27:13 +01:00

More MySQL implementation.

This commit is contained in:
Sandu Liviu Catalin 2016-06-05 05:36:33 +03:00
parent 3affe10c35
commit 0d6e80a9d5
5 changed files with 109 additions and 15 deletions

View File

@ -89,6 +89,14 @@ public:
*/ */
static SQInteger Typename(HSQUIRRELVM vm); static SQInteger Typename(HSQUIRRELVM vm);
/* --------------------------------------------------------------------------------------------
* See whether the managed handle is valid.
*/
bool IsValid() const
{
return m_Handle;
}
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Validate the managed connection handle and throw exception if it doesn't exist. * Validate the managed connection handle and throw exception if it doesn't exist.
*/ */

View File

@ -151,7 +151,7 @@ Uint64 ConnHnd::Handle::Execute(CSStr query, Ulong size)
size = std::strlen(query); size = std::strlen(query);
} }
// Attempt to execute the specified query // Attempt to execute the specified query
else if (mysql_real_query(mPtr, query, size) != 0) else if (mysql_query(mPtr, query) != 0)
{ {
THROW_CURRENT_HND((*this), "Unable to execute query"); THROW_CURRENT_HND((*this), "Unable to execute query");
} }

View File

@ -218,6 +218,7 @@ void RegisterAPI(HSQUIRRELVM vm)
.SquirrelFunc(_SC("_typename"), &Connection::Typename) .SquirrelFunc(_SC("_typename"), &Connection::Typename)
.Func(_SC("_tostring"), &Connection::ToString) .Func(_SC("_tostring"), &Connection::ToString)
// Properties // Properties
.Prop(_SC("IsValid"), &Connection::IsValid)
.Prop(_SC("Connected"), &Connection::Connected) .Prop(_SC("Connected"), &Connection::Connected)
.Prop(_SC("ErrNo"), &Connection::GetErrNo) .Prop(_SC("ErrNo"), &Connection::GetErrNo)
.Prop(_SC("ErrStr"), &Connection::GetErrStr) .Prop(_SC("ErrStr"), &Connection::GetErrStr)
@ -297,7 +298,7 @@ void RegisterAPI(HSQUIRRELVM vm)
.SquirrelFunc(_SC("_typename"), &ResultSet::Typename) .SquirrelFunc(_SC("_typename"), &ResultSet::Typename)
.Func(_SC("_tostring"), &ResultSet::ToString) .Func(_SC("_tostring"), &ResultSet::ToString)
// Properties // Properties
//.Prop(_SC("Connected"), &ResultSet::Connected) .Prop(_SC("IsValid"), &ResultSet::IsValid)
// Member Methods // Member Methods
.Func(_SC("SetInt8"), &ResultSet::GetInt8) .Func(_SC("SetInt8"), &ResultSet::GetInt8)
.Func(_SC("SetUint8"), &ResultSet::GetUint8) .Func(_SC("SetUint8"), &ResultSet::GetUint8)
@ -307,8 +308,13 @@ void RegisterAPI(HSQUIRRELVM vm)
.Func(_SC("SetUint32"), &ResultSet::GetUint32) .Func(_SC("SetUint32"), &ResultSet::GetUint32)
.Func(_SC("SetInt64"), &ResultSet::GetInt64) .Func(_SC("SetInt64"), &ResultSet::GetInt64)
.Func(_SC("SetUint64"), &ResultSet::GetUint64) .Func(_SC("SetUint64"), &ResultSet::GetUint64)
.Func(_SC("SetFloat32"), &ResultSet::GetFloat32)
.Func(_SC("SetFloat64"), &ResultSet::GetFloat64)
.Func(_SC("SetBool"), &ResultSet::GetBoolean)
.Func(_SC("SetBoolean"), &ResultSet::GetBoolean)
); );
RootTable(vm).Bind(_SC("SqMySQL"), sqlns);
} }
} // Namespace:: SqMod } // Namespace:: SqMod

View File

@ -58,55 +58,127 @@ SQInteger ResultSet::GetInt8(Uint32 idx) const
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
SQInteger ResultSet::GetUint8(Uint32 idx) const SQInteger ResultSet::GetUint8(Uint32 idx) const
{ {
// Validate the managed handle and specified index
m_Handle.ValidateIndex(idx);
// Should we retrieve the value from the bind wrapper?
if (m_Handle->mStatement)
{
return ConvTo< Uint8 >::From(m_Handle->mBinds[idx].mInt64);
}
// Retrieve the value directly from the row
return ConvTo< Uint8 >::From(*reinterpret_cast< Uint8 ** >(m_Handle->mRow)[idx]);
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
SQInteger ResultSet::GetInt16(Uint32 idx) const SQInteger ResultSet::GetInt16(Uint32 idx) const
{ {
// Validate the managed handle and specified index
m_Handle.ValidateIndex(idx);
// Should we retrieve the value from the bind wrapper?
if (m_Handle->mStatement)
{
return ConvTo< Int16 >::From(m_Handle->mBinds[idx].mInt64);
}
// Retrieve the value directly from the row
return ConvTo< Int16 >::From(*reinterpret_cast< Int16 ** >(m_Handle->mRow)[idx]);
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
SQInteger ResultSet::GetUint16(Uint32 idx) const SQInteger ResultSet::GetUint16(Uint32 idx) const
{ {
// Validate the managed handle and specified index
m_Handle.ValidateIndex(idx);
// Should we retrieve the value from the bind wrapper?
if (m_Handle->mStatement)
{
return ConvTo< Uint16 >::From(m_Handle->mBinds[idx].mInt64);
}
// Retrieve the value directly from the row
return ConvTo< Uint16 >::From(*reinterpret_cast< Uint16 ** >(m_Handle->mRow)[idx]);
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
SQInteger ResultSet::GetInt32(Uint32 idx) const SQInteger ResultSet::GetInt32(Uint32 idx) const
{ {
// Validate the managed handle and specified index
m_Handle.ValidateIndex(idx);
// Should we retrieve the value from the bind wrapper?
if (m_Handle->mStatement)
{
return ConvTo< Int32 >::From(m_Handle->mBinds[idx].mInt64);
}
// Retrieve the value directly from the row
return ConvTo< Int32 >::From(*reinterpret_cast< Int32 ** >(m_Handle->mRow)[idx]);
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
SQInteger ResultSet::GetUint32(Uint32 idx) const SQInteger ResultSet::GetUint32(Uint32 idx) const
{ {
// Validate the managed handle and specified index
m_Handle.ValidateIndex(idx);
// Should we retrieve the value from the bind wrapper?
if (m_Handle->mStatement)
{
return ConvTo< Uint32 >::From(m_Handle->mBinds[idx].mInt64);
}
// Retrieve the value directly from the row
return ConvTo< Uint32 >::From(*reinterpret_cast< Uint32 ** >(m_Handle->mRow)[idx]);
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
Object ResultSet::GetInt64(Uint32 idx) const Int64 ResultSet::GetInt64(Uint32 idx) const
{ {
// Validate the managed handle and specified index
m_Handle.ValidateIndex(idx);
// Should we retrieve the value from the bind wrapper?
if (m_Handle->mStatement)
{
return ConvTo< Int64 >::From(m_Handle->mBinds[idx].mInt64);
}
// Retrieve the value directly from the row
return ConvTo< Int64 >::From(*reinterpret_cast< Int64 ** >(m_Handle->mRow)[idx]);
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
Object ResultSet::GetUint64(Uint32 idx) const Uint64 ResultSet::GetUint64(Uint32 idx) const
{ {
// Validate the managed handle and specified index
m_Handle.ValidateIndex(idx);
// Should we retrieve the value from the bind wrapper?
if (m_Handle->mStatement)
{
return ConvTo< Uint64 >::From(m_Handle->mBinds[idx].mInt64);
}
// Retrieve the value directly from the row
return ConvTo< Uint64 >::From(*reinterpret_cast< Uint64 ** >(m_Handle->mRow)[idx]);
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
SQFloat ResultSet::GetFloat32(Uint32 idx) const SQFloat ResultSet::GetFloat32(Uint32 idx) const
{ {
// Validate the managed handle and specified index
m_Handle.ValidateIndex(idx);
// Should we retrieve the value from the bind wrapper?
if (m_Handle->mStatement)
{
return ConvTo< Float32 >::From(m_Handle->mBinds[idx].mInt64);
}
// Retrieve the value directly from the row
return ConvTo< Float32 >::From(*reinterpret_cast< Float32 ** >(m_Handle->mRow)[idx]);
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
SQFloat ResultSet::GetFloat64(Uint32 idx) const SQFloat ResultSet::GetFloat64(Uint32 idx) const
{ {
// Validate the managed handle and specified index
m_Handle.ValidateIndex(idx);
// Should we retrieve the value from the bind wrapper?
if (m_Handle->mStatement)
{
return ConvTo< Float64 >::From(m_Handle->mBinds[idx].mInt64);
}
// Retrieve the value directly from the row
return ConvTo< Float64 >::From(*reinterpret_cast< Float64 ** >(m_Handle->mRow)[idx]);
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------

View File

@ -77,6 +77,14 @@ public:
*/ */
static SQInteger Typename(HSQUIRRELVM vm); static SQInteger Typename(HSQUIRRELVM vm);
/* --------------------------------------------------------------------------------------------
* See whether the managed handle is valid.
*/
bool IsValid() const
{
return m_Handle;
}
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Retrieve a signed 8 bit integer from a field. * Retrieve a signed 8 bit integer from a field.
*/ */
@ -110,12 +118,12 @@ public:
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Retrieve a signed 64 bit integer from a field. * Retrieve a signed 64 bit integer from a field.
*/ */
Object GetInt64(Uint32 idx) const; Int64 GetInt64(Uint32 idx) const;
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Retrieve an unsigned 64 bit integer from a field. * Retrieve an unsigned 64 bit integer from a field.
*/ */
Object GetUint64(Uint32 idx) const; Uint64 GetUint64(Uint32 idx) const;
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Retrieve a 32 bit floating point from a field. * Retrieve a 32 bit floating point from a field.