diff options
Diffstat (limited to '3rdparty/sqlitecpp/source/SQLiteCpp/Column.cpp')
-rw-r--r-- | 3rdparty/sqlitecpp/source/SQLiteCpp/Column.cpp | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/3rdparty/sqlitecpp/source/SQLiteCpp/Column.cpp b/3rdparty/sqlitecpp/source/SQLiteCpp/Column.cpp new file mode 100644 index 0000000..f5dc0d9 --- /dev/null +++ b/3rdparty/sqlitecpp/source/SQLiteCpp/Column.cpp @@ -0,0 +1,122 @@ +/** + * @file Column.cpp + * @ingroup SQLiteCpp + * @brief Encapsulation of a Column in a row of the result pointed by the prepared SQLite::Statement. + * + * Copyright (c) 2012-2021 Sebastien Rombauts ([email protected]) + * + * Distributed under the MIT License (MIT) (See accompanying file LICENSE.txt + * or copy at http://opensource.org/licenses/MIT) + */ +#include <SQLiteCpp/Column.h> + +#include <sqlite3.h> + +#include <iostream> + + +namespace SQLite +{ + +const int INTEGER = SQLITE_INTEGER; +const int FLOAT = SQLITE_FLOAT; +const int TEXT = SQLITE_TEXT; +const int BLOB = SQLITE_BLOB; +const int Null = SQLITE_NULL; + + +// Encapsulation of a Column in a row of the result pointed by the prepared Statement. +Column::Column(const Statement::TStatementPtr& aStmtPtr, int aIndex) : + mStmtPtr(aStmtPtr), + mIndex(aIndex) +{ + if (!aStmtPtr) + { + throw SQLite::Exception("Statement was destroyed"); + } +} + +// Return the named assigned to this result column (potentially aliased) +const char* Column::getName() const noexcept +{ + return sqlite3_column_name(mStmtPtr.get(), mIndex); +} + +#ifdef SQLITE_ENABLE_COLUMN_METADATA +// Return the name of the table column that is the origin of this result column +const char* Column::getOriginName() const noexcept +{ + return sqlite3_column_origin_name(mStmtPtr.get(), mIndex); +} +#endif + +// Return the integer value of the column specified by its index starting at 0 +int Column::getInt() const noexcept +{ + return sqlite3_column_int(mStmtPtr.get(), mIndex); +} + +// Return the unsigned integer value of the column specified by its index starting at 0 +unsigned Column::getUInt() const noexcept +{ + return static_cast<unsigned>(getInt64()); +} + +// Return the 64bits integer value of the column specified by its index starting at 0 +long long Column::getInt64() const noexcept +{ + return sqlite3_column_int64(mStmtPtr.get(), mIndex); +} + +// Return the double value of the column specified by its index starting at 0 +double Column::getDouble() const noexcept +{ + return sqlite3_column_double(mStmtPtr.get(), mIndex); +} + +// Return a pointer to the text value (NULL terminated string) of the column specified by its index starting at 0 +const char* Column::getText(const char* apDefaultValue /* = "" */) const noexcept +{ + auto pText = reinterpret_cast<const char*>(sqlite3_column_text(mStmtPtr.get(), mIndex)); + return (pText?pText:apDefaultValue); +} + +// Return a pointer to the blob value (*not* NULL terminated) of the column specified by its index starting at 0 +const void* Column::getBlob() const noexcept +{ + return sqlite3_column_blob(mStmtPtr.get(), mIndex); +} + +// Return a std::string to a TEXT or BLOB column +std::string Column::getString() const +{ + // Note: using sqlite3_column_blob and not sqlite3_column_text + // - no need for sqlite3_column_text to add a \0 on the end, as we're getting the bytes length directly + auto data = static_cast<const char *>(sqlite3_column_blob(mStmtPtr.get(), mIndex)); + + // SQLite docs: "The safest policy is to invoke⦠sqlite3_column_blob() followed by sqlite3_column_bytes()" + // Note: std::string is ok to pass nullptr as first arg, if length is 0 + return std::string(data, sqlite3_column_bytes(mStmtPtr.get(), mIndex)); +} + +// Return the type of the value of the column +int Column::getType() const noexcept +{ + return sqlite3_column_type(mStmtPtr.get(), mIndex); +} + +// Return the number of bytes used by the text value of the column +int Column::getBytes() const noexcept +{ + return sqlite3_column_bytes(mStmtPtr.get(), mIndex); +} + +// Standard std::ostream inserter +std::ostream& operator<<(std::ostream& aStream, const Column& aColumn) +{ + aStream.write(aColumn.getText(), aColumn.getBytes()); + return aStream; +} + + +} // namespace SQLite |