mirror of
https://github.com/cuberite/SQLiteCpp.git
synced 2025-08-05 10:16:01 -04:00
Improved name of new function, documentation and tests.
This commit is contained in:
parent
9dee407ff0
commit
0c9d4a3f36
@ -652,10 +652,12 @@ public:
|
|||||||
*
|
*
|
||||||
* @param[in] aIndex Index of the column in the range [0, getColumnCount()).
|
* @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
|
* Throw an exception if the type can't be determined because:
|
||||||
* or if the current statement is not a SELECT statement.
|
* - the specified index is out of the [0, getColumnCount()) range
|
||||||
|
* - the statement is not a SELECT query
|
||||||
|
* - the column at aIndex is not a table column but an expression or subquery
|
||||||
*/
|
*/
|
||||||
const char * getDeclaredType(const int aIndex) const;
|
const char * getColumnDeclaredType(const int aIndex) const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -296,7 +296,7 @@ int Statement::getColumnIndex(const char* apName) const
|
|||||||
return (*iIndex).second;
|
return (*iIndex).second;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char * Statement::getDeclaredType(const int aIndex) const
|
const char * Statement::getColumnDeclaredType(const int aIndex) const
|
||||||
{
|
{
|
||||||
checkIndex(aIndex);
|
checkIndex(aIndex);
|
||||||
const char * result = sqlite3_column_decltype(mStmtPtr, aIndex);
|
const char * result = sqlite3_column_decltype(mStmtPtr, aIndex);
|
||||||
|
@ -918,27 +918,30 @@ TEST(Statement, getName)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Statement, getDeclaredType)
|
TEST(Statement, getColumnDeclaredType)
|
||||||
{
|
{
|
||||||
// Create a new database
|
// Create a new database
|
||||||
SQLite::Database db(":memory:", SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE);
|
SQLite::Database db(":memory:", SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE);
|
||||||
EXPECT_EQ(0, db.exec("CREATE TABLE test (id INTEGER PRIMARY KEY, msg TEXT, value DOUBLE)"));
|
EXPECT_EQ(0, db.exec("CREATE TABLE test (id INTEGER PRIMARY KEY, msg TEXT, value DOUBLE)"));
|
||||||
|
|
||||||
SQLite::Statement query(db, "SELECT * FROM test");
|
SQLite::Statement query(db, "SELECT *, 1 FROM test");
|
||||||
|
|
||||||
const std::string decltype0 = query.getDeclaredType(0);
|
const std::string decltype0 = query.getColumnDeclaredType(0);
|
||||||
const std::string decltype1 = query.getDeclaredType(1);
|
const std::string decltype1 = query.getColumnDeclaredType(1);
|
||||||
const std::string decltype2 = query.getDeclaredType(2);
|
const std::string decltype2 = query.getColumnDeclaredType(2);
|
||||||
EXPECT_EQ("INTEGER", decltype0);
|
EXPECT_EQ("INTEGER", decltype0);
|
||||||
EXPECT_EQ("TEXT", decltype1);
|
EXPECT_EQ("TEXT", decltype1);
|
||||||
EXPECT_EQ("DOUBLE", decltype2);
|
EXPECT_EQ("DOUBLE", decltype2);
|
||||||
|
|
||||||
// Index out of bounds.
|
// The column at index 3 is not a table column.
|
||||||
EXPECT_THROW(query.getDeclaredType(3), SQLite::Exception);
|
EXPECT_THROW(query.getColumnDeclaredType(3), SQLite::Exception);
|
||||||
|
|
||||||
// Not a SELECT statement.
|
// Index out of bounds.
|
||||||
SQLite::Statement insert(db, "INSERT INTO test VALUES (1, 'Hello', 3.1415)");
|
EXPECT_THROW(query.getColumnDeclaredType(4), SQLite::Exception);
|
||||||
EXPECT_THROW(insert.getDeclaredType(0), SQLite::Exception);
|
|
||||||
|
// Not a select statement.
|
||||||
|
SQLite::Statement pragma(db,"PRAGMA compile_options");
|
||||||
|
EXPECT_THROW(pragma.getColumnDeclaredType(0), SQLite::Exception);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __cplusplus >= 201402L || (defined(_MSC_VER) && _MSC_VER >= 1900)
|
#if __cplusplus >= 201402L || (defined(_MSC_VER) && _MSC_VER >= 1900)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user