From 55c4420b69fa172ac7b6b3523597b9a46a5d1bcd Mon Sep 17 00:00:00 2001 From: rtk0c Date: Sun, 22 May 2022 14:54:06 -0700 Subject: Vendor SQLiteCpp completely for internal patching --- 3rdparty/sqlitecpp/source/SQLiteCpp/Column.cpp | 122 +++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 3rdparty/sqlitecpp/source/SQLiteCpp/Column.cpp (limited to '3rdparty/sqlitecpp/source/SQLiteCpp/Column.cpp') 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 (sebastien.rombauts@gmail.com) + * + * Distributed under the MIT License (MIT) (See accompanying file LICENSE.txt + * or copy at http://opensource.org/licenses/MIT) + */ +#include + +#include + +#include + + +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(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(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(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 -- cgit v1.2.3-70-g09d2