mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2025-01-19 12:07:13 +01:00
Prevent server crash by accessing row data from MySQL result-set when there is no valid row available. Throw an error instead. Should close #25
This commit is contained in:
parent
0b6f817e1f
commit
8ce40ee74c
@ -29,17 +29,20 @@ namespace SqMod {
|
|||||||
#define SQMOD_VALIDATE_CREATED(x) (x).ValidateCreated(__FILE__, __LINE__)
|
#define SQMOD_VALIDATE_CREATED(x) (x).ValidateCreated(__FILE__, __LINE__)
|
||||||
#define SQMOD_VALIDATE_PARAM(x, i) (x).ValidateParam((i), __FILE__, __LINE__)
|
#define SQMOD_VALIDATE_PARAM(x, i) (x).ValidateParam((i), __FILE__, __LINE__)
|
||||||
#define SQMOD_VALIDATE_FIELD(x, i) (x).ValidateField((i), __FILE__, __LINE__)
|
#define SQMOD_VALIDATE_FIELD(x, i) (x).ValidateField((i), __FILE__, __LINE__)
|
||||||
|
#define SQMOD_VALIDATE_STEPPED(x) (x).ValidateStepped(__FILE__, __LINE__)
|
||||||
#define SQMOD_GET_VALID(x) (x).GetValid(__FILE__, __LINE__)
|
#define SQMOD_GET_VALID(x) (x).GetValid(__FILE__, __LINE__)
|
||||||
#define SQMOD_GET_CREATED(x) (x).GetCreated(__FILE__, __LINE__)
|
#define SQMOD_GET_CREATED(x) (x).GetCreated(__FILE__, __LINE__)
|
||||||
|
#define SQMOD_GET_STEPPED(x) (x).GetStepped(__FILE__, __LINE__)
|
||||||
#else
|
#else
|
||||||
#define SQMOD_THROW_CURRENT(x, a) (x).ThrowCurrent(a)
|
#define SQMOD_THROW_CURRENT(x, a) (x).ThrowCurrent(a)
|
||||||
#define SQMOD_VALIDATE(x) (x).Validate()
|
#define SQMOD_VALIDATE(x) (x).Validate()
|
||||||
#define SQMOD_VALIDATE_CREATED(x) (x).ValidateCreated()
|
#define SQMOD_VALIDATE_CREATED(x) (x).ValidateCreated()
|
||||||
#define SQMOD_VALIDATE_PARAM(x, i) (x).ValidateParam((i))
|
#define SQMOD_VALIDATE_PARAM(x, i) (x).ValidateParam((i))
|
||||||
#define SQMOD_VALIDATE_FIELD(x, i) (x).ValidateField((i))
|
#define SQMOD_VALIDATE_FIELD(x, i) (x).ValidateField((i))
|
||||||
#define SQMOD_VALIDATE_ROW(x) (x).ValidateRow()
|
#define SQMOD_VALIDATE_STEPPED(x) (x).ValidateStepped()
|
||||||
#define SQMOD_GET_VALID(x) (x).GetValid()
|
#define SQMOD_GET_VALID(x) (x).GetValid()
|
||||||
#define SQMOD_GET_CREATED(x) (x).GetCreated()
|
#define SQMOD_GET_CREATED(x) (x).GetCreated()
|
||||||
|
#define SQMOD_GET_STEPPED(x) (x).GetStepped()
|
||||||
#endif // _DEBUG
|
#endif // _DEBUG
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------------------------------
|
||||||
|
@ -88,6 +88,41 @@ void Field::ValidateCreated() const
|
|||||||
}
|
}
|
||||||
#endif // _DEBUG
|
#endif // _DEBUG
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
|
void Field::ValidateStepped(CCStr file, Int32 line) const
|
||||||
|
{
|
||||||
|
// Do we have a valid result-set handle?
|
||||||
|
if (!m_Handle)
|
||||||
|
{
|
||||||
|
SqThrowF("Invalid MySQL result-set reference =>[%s:%d]", file, line);
|
||||||
|
}
|
||||||
|
// Do we have a valid row available?
|
||||||
|
else if (m_Handle->mRow == nullptr)
|
||||||
|
{
|
||||||
|
SqThrowF("No row available in MySQL result-set =>[%s:%d]", file, line);
|
||||||
|
}
|
||||||
|
// Are we pointing to a valid index?
|
||||||
|
m_Handle->ValidateField(m_Index, file, line);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void Field::ValidateStepped() const
|
||||||
|
{
|
||||||
|
// Do we have a valid result-set handle?
|
||||||
|
if (!m_Handle)
|
||||||
|
{
|
||||||
|
SqThrowF("Invalid MySQL result-set reference");
|
||||||
|
}
|
||||||
|
// Do we have a valid row available?
|
||||||
|
else if (m_Handle->mRow == nullptr)
|
||||||
|
{
|
||||||
|
SqThrowF("No row available in MySQL result-set");
|
||||||
|
}
|
||||||
|
// Are we pointing to a valid index?
|
||||||
|
m_Handle->ValidateField(m_Index);
|
||||||
|
}
|
||||||
|
#endif // _DEBUG
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
const ResRef & Field::GetValid(CCStr file, Int32 line) const
|
const ResRef & Field::GetValid(CCStr file, Int32 line) const
|
||||||
@ -118,6 +153,21 @@ const ResRef & Field::GetCreated() const
|
|||||||
}
|
}
|
||||||
#endif // _DEBUG
|
#endif // _DEBUG
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
|
const ResRef & Field::GetStepped(CCStr file, Int32 line) const
|
||||||
|
{
|
||||||
|
ValidateStepped(file, line);
|
||||||
|
return m_Handle;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
const ResRef & Field::GetStepped() const
|
||||||
|
{
|
||||||
|
ValidateStepped();
|
||||||
|
return m_Handle;
|
||||||
|
}
|
||||||
|
#endif // _DEBUG
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
void Field::ValidateField(Uint32 idx, CCStr file, Int32 line) const
|
void Field::ValidateField(Uint32 idx, CCStr file, Int32 line) const
|
||||||
@ -232,7 +282,7 @@ Object Field::GetConnection() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
bool Field::GetBoolean() const
|
bool Field::GetBoolean() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
if (m_Handle->mStatement)
|
if (m_Handle->mStatement)
|
||||||
{
|
{
|
||||||
@ -247,7 +297,7 @@ bool Field::GetBoolean() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQChar Field::GetChar() const
|
SQChar Field::GetChar() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
if (m_Handle->mStatement)
|
if (m_Handle->mStatement)
|
||||||
{
|
{
|
||||||
@ -262,7 +312,7 @@ SQChar Field::GetChar() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQInteger Field::GetInteger() const
|
SQInteger Field::GetInteger() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
if (m_Handle->mStatement)
|
if (m_Handle->mStatement)
|
||||||
{
|
{
|
||||||
@ -281,7 +331,7 @@ SQInteger Field::GetInteger() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQFloat Field::GetFloat() const
|
SQFloat Field::GetFloat() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
if (m_Handle->mStatement)
|
if (m_Handle->mStatement)
|
||||||
{
|
{
|
||||||
@ -300,7 +350,7 @@ SQFloat Field::GetFloat() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQInteger Field::GetInt8() const
|
SQInteger Field::GetInt8() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
if (m_Handle->mStatement)
|
if (m_Handle->mStatement)
|
||||||
{
|
{
|
||||||
@ -315,7 +365,7 @@ SQInteger Field::GetInt8() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQInteger Field::GetUint8() const
|
SQInteger Field::GetUint8() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
if (m_Handle->mStatement)
|
if (m_Handle->mStatement)
|
||||||
{
|
{
|
||||||
@ -330,7 +380,7 @@ SQInteger Field::GetUint8() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQInteger Field::GetInt16() const
|
SQInteger Field::GetInt16() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
if (m_Handle->mStatement)
|
if (m_Handle->mStatement)
|
||||||
{
|
{
|
||||||
@ -345,7 +395,7 @@ SQInteger Field::GetInt16() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQInteger Field::GetUint16() const
|
SQInteger Field::GetUint16() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
if (m_Handle->mStatement)
|
if (m_Handle->mStatement)
|
||||||
{
|
{
|
||||||
@ -360,7 +410,7 @@ SQInteger Field::GetUint16() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQInteger Field::GetInt32() const
|
SQInteger Field::GetInt32() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
if (m_Handle->mStatement)
|
if (m_Handle->mStatement)
|
||||||
{
|
{
|
||||||
@ -375,7 +425,7 @@ SQInteger Field::GetInt32() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQInteger Field::GetUint32() const
|
SQInteger Field::GetUint32() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
if (m_Handle->mStatement)
|
if (m_Handle->mStatement)
|
||||||
{
|
{
|
||||||
@ -390,7 +440,7 @@ SQInteger Field::GetUint32() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
Object Field::GetInt64() const
|
Object Field::GetInt64() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Obtain the initial stack size
|
// Obtain the initial stack size
|
||||||
const StackGuard sg;
|
const StackGuard sg;
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
@ -414,7 +464,7 @@ Object Field::GetInt64() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
Object Field::GetUint64() const
|
Object Field::GetUint64() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Obtain the initial stack size
|
// Obtain the initial stack size
|
||||||
const StackGuard sg;
|
const StackGuard sg;
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
@ -438,7 +488,7 @@ Object Field::GetUint64() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQFloat Field::GetFloat32() const
|
SQFloat Field::GetFloat32() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
if (m_Handle->mStatement)
|
if (m_Handle->mStatement)
|
||||||
{
|
{
|
||||||
@ -453,7 +503,7 @@ SQFloat Field::GetFloat32() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
SQFloat Field::GetFloat64() const
|
SQFloat Field::GetFloat64() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Should we retrieve the value from the bind wrapper?
|
// Should we retrieve the value from the bind wrapper?
|
||||||
if (m_Handle->mStatement)
|
if (m_Handle->mStatement)
|
||||||
{
|
{
|
||||||
@ -468,7 +518,7 @@ SQFloat Field::GetFloat64() const
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
Object Field::GetString() const
|
Object Field::GetString() const
|
||||||
{
|
{
|
||||||
SQMOD_VALIDATE_CREATED(*this);
|
SQMOD_VALIDATE_STEPPED(*this);
|
||||||
// Obtain the initial stack size
|
// Obtain the initial stack size
|
||||||
const StackGuard sg;
|
const StackGuard sg;
|
||||||
// Retrieve the value directly from the row and push it on the stack
|
// Retrieve the value directly from the row and push it on the stack
|
||||||
|
@ -41,6 +41,15 @@ protected:
|
|||||||
void ValidateCreated() const;
|
void ValidateCreated() const;
|
||||||
#endif // _DEBUG
|
#endif // _DEBUG
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------
|
||||||
|
* Validate the associated result-set handle, field index and row, and throw an error if invalid.
|
||||||
|
*/
|
||||||
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
|
void ValidateStepped(CCStr file, Int32 line) const;
|
||||||
|
#else
|
||||||
|
void ValidateStepped() const;
|
||||||
|
#endif // _DEBUG
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
* Validate the associated result-set handle and field index, and throw an error if invalid.
|
* Validate the associated result-set handle and field index, and throw an error if invalid.
|
||||||
*/
|
*/
|
||||||
@ -59,6 +68,15 @@ protected:
|
|||||||
const ResRef & GetCreated() const;
|
const ResRef & GetCreated() const;
|
||||||
#endif // _DEBUG
|
#endif // _DEBUG
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------
|
||||||
|
* Validate the associated result-set handle field index and row, and throw an error if invalid.
|
||||||
|
*/
|
||||||
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
|
const ResRef & GetStepped(CCStr file, Int32 line) const;
|
||||||
|
#else
|
||||||
|
const ResRef & GetStepped() const;
|
||||||
|
#endif // _DEBUG
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
* Validate the associated result-set handle and field index, and throw an error if invalid.
|
* Validate the associated result-set handle and field index, and throw an error if invalid.
|
||||||
*/
|
*/
|
||||||
|
@ -19,6 +19,7 @@ SQInteger ResultSet::Typename(HSQUIRRELVM vm)
|
|||||||
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
void ResultSet::Validate(CCStr file, Int32 line) const
|
void ResultSet::Validate(CCStr file, Int32 line) const
|
||||||
{
|
{
|
||||||
|
// Do we have a valid result-set handle?
|
||||||
if (!m_Handle)
|
if (!m_Handle)
|
||||||
{
|
{
|
||||||
SqThrowF("Invalid MySQL result-set reference =>[%s:%d]", file, line);
|
SqThrowF("Invalid MySQL result-set reference =>[%s:%d]", file, line);
|
||||||
@ -27,6 +28,7 @@ void ResultSet::Validate(CCStr file, Int32 line) const
|
|||||||
#else
|
#else
|
||||||
void ResultSet::Validate() const
|
void ResultSet::Validate() const
|
||||||
{
|
{
|
||||||
|
// Do we have a valid result-set handle?
|
||||||
if (!m_Handle)
|
if (!m_Handle)
|
||||||
{
|
{
|
||||||
SqThrowF("Invalid MySQL result-set reference");
|
SqThrowF("Invalid MySQL result-set reference");
|
||||||
@ -38,6 +40,7 @@ void ResultSet::Validate() const
|
|||||||
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
void ResultSet::ValidateCreated(CCStr file, Int32 line) const
|
void ResultSet::ValidateCreated(CCStr file, Int32 line) const
|
||||||
{
|
{
|
||||||
|
// Do we have a valid result-set handle?
|
||||||
if (!m_Handle)
|
if (!m_Handle)
|
||||||
{
|
{
|
||||||
SqThrowF("Invalid MySQL result-set reference =>[%s:%d]", file, line);
|
SqThrowF("Invalid MySQL result-set reference =>[%s:%d]", file, line);
|
||||||
@ -50,6 +53,7 @@ void ResultSet::ValidateCreated(CCStr file, Int32 line) const
|
|||||||
#else
|
#else
|
||||||
void ResultSet::ValidateCreated() const
|
void ResultSet::ValidateCreated() const
|
||||||
{
|
{
|
||||||
|
// Do we have a valid result-set handle?
|
||||||
if (!m_Handle)
|
if (!m_Handle)
|
||||||
{
|
{
|
||||||
SqThrowF("Invalid MySQL result-set reference");
|
SqThrowF("Invalid MySQL result-set reference");
|
||||||
@ -61,6 +65,37 @@ void ResultSet::ValidateCreated() const
|
|||||||
}
|
}
|
||||||
#endif // _DEBUG
|
#endif // _DEBUG
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
|
void ResultSet::ValidateStepped(CCStr file, Int32 line) const
|
||||||
|
{
|
||||||
|
// Do we have a valid result-set handle?
|
||||||
|
if (!m_Handle)
|
||||||
|
{
|
||||||
|
SqThrowF("Invalid MySQL result-set reference =>[%s:%d]", file, line);
|
||||||
|
}
|
||||||
|
// Do we have a valid row available?
|
||||||
|
else if (m_Handle->mRow == nullptr)
|
||||||
|
{
|
||||||
|
SqThrowF("No row available in MySQL result-set =>[%s:%d]", file, line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void ResultSet::ValidateStepped() const
|
||||||
|
{
|
||||||
|
// Do we have a valid result-set handle?
|
||||||
|
if (!m_Handle)
|
||||||
|
{
|
||||||
|
SqThrowF("Invalid MySQL result-set reference");
|
||||||
|
}
|
||||||
|
// Do we have a valid row available?
|
||||||
|
else if (m_Handle->mRow == nullptr)
|
||||||
|
{
|
||||||
|
SqThrowF("No row available in MySQL result-set");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // _DEBUG
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
const ResRef & ResultSet::GetValid(CCStr file, Int32 line) const
|
const ResRef & ResultSet::GetValid(CCStr file, Int32 line) const
|
||||||
@ -91,6 +126,21 @@ const ResRef & ResultSet::GetCreated() const
|
|||||||
}
|
}
|
||||||
#endif // _DEBUG
|
#endif // _DEBUG
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
|
const ResRef & ResultSet::GetStepped(CCStr file, Int32 line) const
|
||||||
|
{
|
||||||
|
ValidateStepped(file, line);
|
||||||
|
return m_Handle;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
const ResRef & ResultSet::GetStepped() const
|
||||||
|
{
|
||||||
|
ValidateStepped();
|
||||||
|
return m_Handle;
|
||||||
|
}
|
||||||
|
#endif // _DEBUG
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
void ResultSet::ValidateField(Int32 idx, CCStr file, Int32 line) const
|
void ResultSet::ValidateField(Int32 idx, CCStr file, Int32 line) const
|
||||||
|
@ -38,6 +38,15 @@ protected:
|
|||||||
void ValidateCreated() const;
|
void ValidateCreated() const;
|
||||||
#endif // _DEBUG
|
#endif // _DEBUG
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------
|
||||||
|
* Validate the managed statement handle and row, and throw an error if invalid.
|
||||||
|
*/
|
||||||
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
|
void ValidateStepped(CCStr file, Int32 line) const;
|
||||||
|
#else
|
||||||
|
void ValidateStepped() const;
|
||||||
|
#endif // _DEBUG
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
* Validate the managed statement handle and throw an error if invalid.
|
* Validate the managed statement handle and throw an error if invalid.
|
||||||
*/
|
*/
|
||||||
@ -56,6 +65,15 @@ protected:
|
|||||||
const ResRef & GetCreated() const;
|
const ResRef & GetCreated() const;
|
||||||
#endif // _DEBUG
|
#endif // _DEBUG
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------
|
||||||
|
* Validate the managed statement handle and row, and throw an error if invalid.
|
||||||
|
*/
|
||||||
|
#if defined(_DEBUG) || defined(SQMOD_EXCEPTLOC)
|
||||||
|
const ResRef & GetStepped(CCStr file, Int32 line) const;
|
||||||
|
#else
|
||||||
|
const ResRef & GetStepped() const;
|
||||||
|
#endif // _DEBUG
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
* Validate the statement reference and field index, and throw an error if they're invalid.
|
* Validate the statement reference and field index, and throw an error if they're invalid.
|
||||||
*/
|
*/
|
||||||
@ -219,7 +237,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
Field GetField(const Object & field) const
|
Field GetField(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field);
|
return Field(SQMOD_GET_STEPPED(*this), field);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -227,7 +245,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool GetBoolean(const Object & field) const
|
bool GetBoolean(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetBoolean();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetBoolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -235,7 +253,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
SQChar GetChar(const Object & field) const
|
SQChar GetChar(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetChar();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetChar();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -243,7 +261,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
SQInteger GetInteger(const Object & field) const
|
SQInteger GetInteger(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetInteger();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetInteger();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -251,7 +269,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
SQFloat GetFloat(const Object & field) const
|
SQFloat GetFloat(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetFloat();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetFloat();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -259,7 +277,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
SQInteger GetInt8(const Object & field) const
|
SQInteger GetInt8(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetInt8();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetInt8();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -267,7 +285,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
SQInteger GetUint8(const Object & field) const
|
SQInteger GetUint8(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetUint8();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetUint8();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -275,7 +293,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
SQInteger GetInt16(const Object & field) const
|
SQInteger GetInt16(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetInt16();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetInt16();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -283,7 +301,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
SQInteger GetUint16(const Object & field) const
|
SQInteger GetUint16(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetUint16();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetUint16();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -291,7 +309,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
SQInteger GetInt32(const Object & field) const
|
SQInteger GetInt32(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetInt32();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetInt32();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -299,7 +317,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
SQInteger GetUint32(const Object & field) const
|
SQInteger GetUint32(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetUint32();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetUint32();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -307,7 +325,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
Object GetInt64(const Object & field) const
|
Object GetInt64(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetInt64();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetInt64();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -315,7 +333,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
Object GetUint64(const Object & field) const
|
Object GetUint64(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetUint64();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetUint64();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -323,7 +341,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
SQFloat GetFloat32(const Object & field) const
|
SQFloat GetFloat32(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetFloat32();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetFloat32();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -331,7 +349,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
SQFloat GetFloat64(const Object & field) const
|
SQFloat GetFloat64(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetFloat64();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetFloat64();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -339,7 +357,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
Object GetString(const Object & field) const
|
Object GetString(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetString();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -347,7 +365,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
Object GetBuffer(const Object & field) const
|
Object GetBuffer(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetBuffer();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
@ -355,7 +373,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
Object GetBlob(const Object & field) const
|
Object GetBlob(const Object & field) const
|
||||||
{
|
{
|
||||||
return Field(SQMOD_GET_CREATED(*this), field).GetBlob();
|
return Field(SQMOD_GET_STEPPED(*this), field).GetBlob();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user