forked from qt-creator/qt-creator
Sqlite: Improve SqliteStatement
There are now only value and values methods. value returns an optional and values are returning a vector. The result value count has now be specified instead of the result value list. Change-Id: I17a0741d5e838b4bf4b9486825c870ada1722584 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -75,6 +75,10 @@ protected:
|
||||
|
||||
struct Output
|
||||
{
|
||||
Output(Utils::SmallString name, Utils::SmallString number, long long value)
|
||||
: name(name), number(number), value(value)
|
||||
{}
|
||||
|
||||
Utils::SmallString name;
|
||||
Utils::SmallString number;
|
||||
long long value;
|
||||
@@ -124,13 +128,13 @@ TEST_F(SqliteStatement, Value)
|
||||
|
||||
statement.next();
|
||||
|
||||
ASSERT_THAT(statement.value<int>(0), 0);
|
||||
ASSERT_THAT(statement.value<int64_t>(0), 0);
|
||||
ASSERT_THAT(statement.value<double>(0), 0.0);
|
||||
ASSERT_THAT(statement.fetchValue<int>(0), 0);
|
||||
ASSERT_THAT(statement.fetchValue<int64_t>(0), 0);
|
||||
ASSERT_THAT(statement.fetchValue<double>(0), 0.0);
|
||||
ASSERT_THAT(statement.text(0), "foo");
|
||||
ASSERT_THAT(statement.value<int>(1), 23);
|
||||
ASSERT_THAT(statement.value<int64_t>(1), 23);
|
||||
ASSERT_THAT(statement.value<double>(1), 23.3);
|
||||
ASSERT_THAT(statement.fetchValue<int>(1), 23);
|
||||
ASSERT_THAT(statement.fetchValue<int64_t>(1), 23);
|
||||
ASSERT_THAT(statement.fetchValue<double>(1), 23.3);
|
||||
ASSERT_THAT(statement.text(1), "23.3");
|
||||
}
|
||||
|
||||
@@ -138,7 +142,7 @@ TEST_F(SqliteStatement, ThrowNoValuesToFetchForNotSteppedStatement)
|
||||
{
|
||||
SqliteTestStatement statement("SELECT name, number FROM test", database);
|
||||
|
||||
ASSERT_THROW(statement.value<int>(0), Sqlite::NoValuesToFetch);
|
||||
ASSERT_THROW(statement.fetchValue<int>(0), Sqlite::NoValuesToFetch);
|
||||
}
|
||||
|
||||
TEST_F(SqliteStatement, ThrowNoValuesToFetchForDoneStatement)
|
||||
@@ -146,7 +150,7 @@ TEST_F(SqliteStatement, ThrowNoValuesToFetchForDoneStatement)
|
||||
SqliteTestStatement statement("SELECT name, number FROM test", database);
|
||||
while (statement.next()) {}
|
||||
|
||||
ASSERT_THROW(statement.value<int>(0), Sqlite::NoValuesToFetch);
|
||||
ASSERT_THROW(statement.fetchValue<int>(0), Sqlite::NoValuesToFetch);
|
||||
}
|
||||
|
||||
TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForNegativeColumn)
|
||||
@@ -154,7 +158,7 @@ TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForNegativeColumn)
|
||||
SqliteTestStatement statement("SELECT name, number FROM test", database);
|
||||
statement.next();
|
||||
|
||||
ASSERT_THROW(statement.value<int>(-1), Sqlite::InvalidColumnFetched);
|
||||
ASSERT_THROW(statement.fetchValue<int>(-1), Sqlite::InvalidColumnFetched);
|
||||
}
|
||||
|
||||
TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForNotExistingColumn)
|
||||
@@ -162,7 +166,7 @@ TEST_F(SqliteStatement, ThrowInvalidColumnFetchedForNotExistingColumn)
|
||||
SqliteTestStatement statement("SELECT name, number FROM test", database);
|
||||
statement.next();
|
||||
|
||||
ASSERT_THROW(statement.value<int>(2), Sqlite::InvalidColumnFetched);
|
||||
ASSERT_THROW(statement.fetchValue<int>(2), Sqlite::InvalidColumnFetched);
|
||||
}
|
||||
|
||||
TEST_F(SqliteStatement, ToIntergerValue)
|
||||
@@ -206,7 +210,7 @@ TEST_F(SqliteStatement, BindString)
|
||||
statement.next();
|
||||
|
||||
ASSERT_THAT(statement.text(0), "foo");
|
||||
ASSERT_THAT(statement.value<double>(1), 23.3);
|
||||
ASSERT_THAT(statement.fetchValue<double>(1), 23.3);
|
||||
}
|
||||
|
||||
TEST_F(SqliteStatement, BindInteger)
|
||||
@@ -356,7 +360,7 @@ TEST_F(SqliteStatement, GetTupleValuesWithoutArguments)
|
||||
using Tuple = std::tuple<Utils::SmallString, double, int>;
|
||||
ReadStatement statement("SELECT name, number, value FROM test", database);
|
||||
|
||||
auto values = statement.tupleValues<Utils::SmallString, double, int>(3);
|
||||
auto values = statement.values<Tuple, 3>(3);
|
||||
|
||||
ASSERT_THAT(values, ElementsAre(Tuple{"bar", 0, 1},
|
||||
Tuple{"foo", 23.3, 2},
|
||||
@@ -376,7 +380,7 @@ TEST_F(SqliteStatement, GetStructValuesWithoutArguments)
|
||||
{
|
||||
ReadStatement statement("SELECT name, number, value FROM test", database);
|
||||
|
||||
auto values = statement.structValues<Output, Utils::SmallString, Utils::SmallString, long long>(3);
|
||||
auto values = statement.values<Output, 3>(3);
|
||||
|
||||
ASSERT_THAT(values, ElementsAre(Output{"bar", "blah", 1},
|
||||
Output{"foo", "23.3", 2},
|
||||
@@ -399,7 +403,7 @@ TEST_F(SqliteStatement, GetValuesForMultipleOutputValuesAndContainerQueryValues)
|
||||
std::vector<double> queryValues = {40, 23.3};
|
||||
ReadStatement statement("SELECT name, number, value FROM test WHERE number=?", database);
|
||||
|
||||
auto values = statement.tupleValues<Utils::SmallString, double, double>(3, queryValues);
|
||||
auto values = statement.values<Tuple, 3>(3, queryValues);
|
||||
|
||||
ASSERT_THAT(values, ElementsAre(Tuple{"poo", 40, 3.},
|
||||
Tuple{"foo", 23.3, 2.}));
|
||||
@@ -418,14 +422,14 @@ TEST_F(SqliteStatement, GetValuesForSingleOutputValuesAndContainerQueryValues)
|
||||
TEST_F(SqliteStatement, GetValuesForMultipleOutputValuesAndContainerQueryTupleValues)
|
||||
{
|
||||
using Tuple = std::tuple<Utils::SmallString, Utils::SmallString, int>;
|
||||
using Tuple2 = std::tuple<Utils::SmallString, double, int>;
|
||||
using ResultTuple = std::tuple<Utils::SmallString, double, int>;
|
||||
std::vector<Tuple> queryValues = {{"poo", "40", 3}, {"bar", "blah", 1}};
|
||||
ReadStatement statement("SELECT name, number, value FROM test WHERE name= ? AND number=? AND value=?", database);
|
||||
|
||||
auto values = statement.tupleValues<Utils::SmallString, double, int>(3, queryValues);
|
||||
auto values = statement.values<ResultTuple, 3>(3, queryValues);
|
||||
|
||||
ASSERT_THAT(values, ElementsAre(Tuple2{"poo", 40, 3},
|
||||
Tuple2{"bar", 0, 1}));
|
||||
ASSERT_THAT(values, ElementsAre(ResultTuple{"poo", 40, 3},
|
||||
ResultTuple{"bar", 0, 1}));
|
||||
}
|
||||
|
||||
TEST_F(SqliteStatement, GetValuesForSingleOutputValuesAndContainerQueryTupleValues)
|
||||
@@ -444,7 +448,7 @@ TEST_F(SqliteStatement, GetValuesForMultipleOutputValuesAndMultipleQueryValue)
|
||||
using Tuple = std::tuple<Utils::SmallString, Utils::SmallString, long long>;
|
||||
ReadStatement statement("SELECT name, number, value FROM test WHERE name=? AND number=? AND value=?", database);
|
||||
|
||||
auto values = statement.tupleValues<Utils::SmallString, Utils::SmallString, long long>(3, "bar", "blah", 1);
|
||||
auto values = statement.values<Tuple, 3>(3, "bar", "blah", 1);
|
||||
|
||||
ASSERT_THAT(values, ElementsAre(Tuple{"bar", "blah", 1}));
|
||||
}
|
||||
@@ -453,9 +457,9 @@ TEST_F(SqliteStatement, CallGetValuesForMultipleOutputValuesAndMultipleQueryValu
|
||||
{
|
||||
using Tuple = std::tuple<Utils::SmallString, Utils::SmallString, long long>;
|
||||
ReadStatement statement("SELECT name, number, value FROM test WHERE name=? AND number=?", database);
|
||||
statement.tupleValues<Utils::SmallString, Utils::SmallString, long long>(3, "bar", "blah");
|
||||
statement.values<Tuple, 3>(3, "bar", "blah");
|
||||
|
||||
auto values = statement.tupleValues<Utils::SmallString, Utils::SmallString, long long>(3, "bar", "blah");
|
||||
auto values = statement.values<Tuple, 3>(3, "bar", "blah");
|
||||
|
||||
ASSERT_THAT(values, ElementsAre(Tuple{"bar", "blah", 1}));
|
||||
}
|
||||
@@ -464,7 +468,7 @@ TEST_F(SqliteStatement, GetStructOutputValuesAndMultipleQueryValue)
|
||||
{
|
||||
ReadStatement statement("SELECT name, number, value FROM test WHERE name=? AND number=? AND value=?", database);
|
||||
|
||||
auto values = statement.structValues<Output, Utils::SmallString, Utils::SmallString, long long>(3, "bar", "blah", 1);
|
||||
auto values = statement.values<Output, 3>(3, "bar", "blah", 1);
|
||||
|
||||
ASSERT_THAT(values, ElementsAre(Output{"bar", "blah", 1}));
|
||||
}
|
||||
@@ -474,7 +478,7 @@ TEST_F(SqliteStatement, GetStructOutputValuesAndContainerQueryValues)
|
||||
std::vector<double> queryValues = {40, 23.3};
|
||||
ReadStatement statement("SELECT name, number, value FROM test WHERE number=?", database);
|
||||
|
||||
auto values = statement.structValues<Output, Utils::SmallString, Utils::SmallString, long long>(3, queryValues);
|
||||
auto values = statement.values<Output, 3>(3, queryValues);
|
||||
|
||||
ASSERT_THAT(values, ElementsAre(Output{"poo", "40", 3},
|
||||
Output{"foo", "23.3", 2}));
|
||||
@@ -486,12 +490,41 @@ TEST_F(SqliteStatement, GetStructOutputValuesAndContainerQueryTupleValues)
|
||||
std::vector<Tuple> queryValues = {{"poo", "40", 3}, {"bar", "blah", 1}};
|
||||
ReadStatement statement("SELECT name, number, value FROM test WHERE name= ? AND number=? AND value=?", database);
|
||||
|
||||
auto values = statement.structValues<Output, Utils::SmallString, Utils::SmallString, long long>(3, queryValues);
|
||||
auto values = statement.values<Output, 3>(3, queryValues);
|
||||
|
||||
ASSERT_THAT(values, ElementsAre(Output{"poo", "40", 3},
|
||||
Output{"bar", "blah", 1}));
|
||||
}
|
||||
|
||||
TEST_F(SqliteStatement, GetOptionalSingleValueAndMultipleQueryValue)
|
||||
{
|
||||
ReadStatement statement("SELECT name FROM test WHERE name=? AND number=? AND value=?", database);
|
||||
|
||||
auto value = statement.value<Utils::SmallString>("bar", "blah", 1);
|
||||
|
||||
ASSERT_THAT(value.value(), Eq("bar"));
|
||||
}
|
||||
|
||||
TEST_F(SqliteStatement, GetOptionalOutputValueAndMultipleQueryValue)
|
||||
{
|
||||
ReadStatement statement("SELECT name, number, value FROM test WHERE name=? AND number=? AND value=?", database);
|
||||
|
||||
auto value = statement.value<Output, 3>("bar", "blah", 1);
|
||||
|
||||
ASSERT_THAT(value.value(), Eq(Output{"bar", "blah", 1}));
|
||||
}
|
||||
|
||||
TEST_F(SqliteStatement, GetOptionalTupleValueAndMultipleQueryValue)
|
||||
{
|
||||
using Tuple = std::tuple<Utils::SmallString, Utils::SmallString, long long>;
|
||||
ReadStatement statement("SELECT name, number, value FROM test WHERE name=? AND number=? AND value=?", database);
|
||||
|
||||
auto value = statement.value<Tuple, 3>("bar", "blah", 1);
|
||||
|
||||
ASSERT_THAT(value.value(), Eq(Tuple{"bar", "blah", 1}));
|
||||
}
|
||||
|
||||
|
||||
void SqliteStatement::SetUp()
|
||||
{
|
||||
database.setJournalMode(JournalMode::Memory);
|
||||
|
||||
Reference in New Issue
Block a user