/*** @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-2025 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 <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 columnconst 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 0int32_t 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 0uint32_t Column::getUInt() const noexcept{return static_cast<unsigned>(getInt64());}// Return the 64bits integer value of the column specified by its index starting at 0int64_t Column::getInt64() const noexcept{return sqlite3_column_int64(mStmtPtr.get(), mIndex);}// Return the double value of the column specified by its index starting at 0double 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 0const 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 0const void* Column::getBlob() const noexcept{return sqlite3_column_blob(mStmtPtr.get(), mIndex);}// Return a std::string to a TEXT or BLOB columnstd::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// however, we need to call sqlite3_column_bytes() to ensure correct format. It's a noop on a BLOB// or a TEXT value with the correct encoding (UTF-8). Otherwise it'll do a conversion to TEXT (UTF-8).(void)sqlite3_column_bytes(mStmtPtr.get(), mIndex);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 0return std::string(data, sqlite3_column_bytes(mStmtPtr.get(), mIndex));}// Return the type of the value of the columnint Column::getType() const noexcept{return sqlite3_column_type(mStmtPtr.get(), mIndex);}// Return the number of bytes used by the text value of the columnint Column::getBytes() const noexcept{return sqlite3_column_bytes(mStmtPtr.get(), mIndex);}// Standard std::ostream inserterstd::ostream& operator<<(std::ostream& aStream, const Column& aColumn){aStream.write(aColumn.getText(), aColumn.getBytes());return aStream;}} // namespace SQLite
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。