From 98aff920810408e73c932718bf11ed36eda5a7d1 Mon Sep 17 00:00:00 2001 From: Daniel Schmidt Date: Mon, 16 Mar 2020 15:26:30 +0100 Subject: [PATCH] Implemented getDeclaredType with documentation. --- include/SQLiteCpp/Statement.h | 16 ++++++++++++++++ src/Statement.cpp | 14 ++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/include/SQLiteCpp/Statement.h b/include/SQLiteCpp/Statement.h index 5d6a73c..24bf06c 100644 --- a/include/SQLiteCpp/Statement.h +++ b/include/SQLiteCpp/Statement.h @@ -643,6 +643,22 @@ public: */ int getColumnIndex(const char* apName) const; + + /** + * @brief Return the declared type of the specified result column for a SELECT statement. + * + * This is the type given at creation of the column and not the actual data type. + * SQLite stores data types dynamically for each value and not per column. + * + * @param[in] aIndex Index of the column in the range [0, getColumnCount()). + * + * Throw an exception if the specified index is out of the [0, getColumnCount()) range + * or if the current statement is not a SELECT statement. + */ + const char * getDeclaredType(const int aIndex) const; + + + //////////////////////////////////////////////////////////////////////////// /// Return the UTF-8 SQL Query. diff --git a/src/Statement.cpp b/src/Statement.cpp index c981ccb..5b28324 100644 --- a/src/Statement.cpp +++ b/src/Statement.cpp @@ -296,6 +296,20 @@ int Statement::getColumnIndex(const char* apName) const return (*iIndex).second; } +const char * Statement::getDeclaredType(const int aIndex) const +{ + checkIndex(aIndex); + const char * result = sqlite3_column_decltype(mStmtPtr, aIndex); + if (!result) + { + throw SQLite::Exception("Could not determine declared column type."); + } + else + { + return result; + } +} + int Statement::getBindParameterCount() const noexcept { return sqlite3_bind_parameter_count(mStmtPtr);