Adding getBlob, getType and isInteger/isFloat/isText/isBlob/isNull methods to the Column class

This commit is contained in:
Sébastien Rombauts 2013-03-08 21:49:28 +01:00
parent dc4802edd5
commit 2412de7676
3 changed files with 64 additions and 11 deletions

View File

@ -5,14 +5,14 @@ C++11 explicit support
Update Doxygen Documentation, but remove it from the master branch Update Doxygen Documentation, but remove it from the master branch
Publish the Doxygen Documentation in the Github Pages (gh-pages branch) Publish the Doxygen Documentation in the Github Pages (gh-pages branch)
Missing features in v0.4.0: Missing test/example in v0.5.0:
- **Blob** => make an example/test with image stored in a row - BLOB : make an example with images stored in a row
- getColumnType + isText + isInt + isDouble...
Missing features in v0.5.0:
- make an example/test with image stored in a row
- getColumnByName ? std::map getRow() ? - getColumnByName ? std::map getRow() ?
Missing documentation in v0.4.0: Missing documentation in v0.5.0:
- parameters of functions in Column and Statement
- Help for the helper functions
- This wrapper is not thread safe : compare to the thread safety of the SQLite3 library - This wrapper is not thread safe : compare to the thread safety of the SQLite3 library
Advanced missing features: Advanced missing features:

View File

@ -51,6 +51,18 @@ const char* Column::getText(void) const throw() // nothrow
return (const char*)sqlite3_column_text(mStmtPtr, mIndex); return (const char*)sqlite3_column_text(mStmtPtr, mIndex);
} }
// Return a pointer to the text value (NULL terminated string) of the column specified by its index starting at 0
const void* Column::getBlob(void) const throw() // nothrow
{
return sqlite3_column_blob(mStmtPtr, mIndex);
}
// Return the type of the value of the column
int Column::getType(void) const throw() // nothrow
{
return sqlite3_column_type(mStmtPtr, mIndex);
}
// Return the number of bytes used by the text value of the column // Return the number of bytes used by the text value of the column
int Column::getBytes(void) const throw() // nothrow int Column::getBytes(void) const throw() // nothrow
{ {

View File

@ -42,16 +42,52 @@ public:
// they copy the Statement::Ptr which in turn increments the reference counter. // they copy the Statement::Ptr which in turn increments the reference counter.
/// Return the integer value of the column. /// Return the integer value of the column.
int getInt (void) const throw(); int getInt (void) const throw(); // nothrow
/// Return the 64bits integer value of the column. /// Return the 64bits integer value of the column.
sqlite3_int64 getInt64 (void) const throw(); sqlite3_int64 getInt64 (void) const throw(); // nothrow
/// Return the double (64bits float) value of the column. /// Return the double (64bits float) value of the column.
double getDouble(void) const throw(); double getDouble(void) const throw(); // nothrow
/// Return a pointer to the text value (NULL terminated string) of the column. /// Return a pointer to the text value (NULL terminated string) of the column.
/// Warning, the value pointed at is only valid while the statement is valid (ie. not finalized), /// Warning, the value pointed at is only valid while the statement is valid (ie. not finalized),
/// thus you must copy it before using it beyond its scope (to a std::string for instance). /// thus you must copy it before using it beyond its scope (to a std::string for instance).
const char* getText (void) const throw(); const char* getText (void) const throw(); // nothrow
// TODO const void* getBlob (void) const throw(); const void* getBlob (void) const throw(); // nothrow
/**
* @brief Return the type of the value of the column
*
* Return either SQLITE_INTEGER, SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB, or SQLITE_NULL.
*
* @warning After a type conversion (by a call to a getXxx on a Column of a Yyy type),
* the value returned by sqlite3_column_type() is undefined.
*/
int getType(void) const throw(); // nothrow
/// Test if the column is an integer type value (meaningfull only before any conversion)
inline bool isInteger(void) const throw() // nothrow
{
return (SQLITE_INTEGER == getType());
}
/// Test if the column is a floting point type value (meaningfull only before any conversion)
inline bool isFloat(void) const throw() // nothrow
{
return (SQLITE_FLOAT == getType());
}
/// Test if the column is a text type value (meaningfull only before any conversion)
inline bool isText(void) const throw() // nothrow
{
return (SQLITE_TEXT == getType());
}
/// Test if the column is a binary blob type value (meaningfull only before any conversion)
inline bool isBlob(void) const throw() // nothrow
{
return (SQLITE_BLOB == getType());
}
/// Test if the column is NULL (meaningfull only before any conversion)
inline bool isNull(void) const throw() // nothrow
{
return (SQLITE_NULL == getType());
}
/** /**
* @brief Return the number of bytes used by the text value of the column * @brief Return the number of bytes used by the text value of the column
@ -84,6 +120,11 @@ public:
{ {
return getText(); return getText();
} }
/// Inline cast operator to void*
inline operator const void*() const
{
return getBlob();
}
#ifdef __GNUC__ #ifdef __GNUC__
// NOTE : the following is required by GCC to cast a Column result in a std::string // NOTE : the following is required by GCC to cast a Column result in a std::string
// (error: conversion from SQLite::Column to non-scalar type std::string {aka std::basic_string<char>} requested) // (error: conversion from SQLite::Column to non-scalar type std::string {aka std::basic_string<char>} requested)