auto r = db.Exec({ Q_SELECT });
EXPECT_TRUE(static_cast<bool>(r));
+ int cnt = 0;
for (const auto& i : r) {
auto [name, num, val, data] = i.Get<_, _, _, _>();
EXPECT_EQ(static_cast<std::string>(name), "gogo");
EXPECT_EQ(v[1], '2');
EXPECT_EQ(v[2], '1');
EXPECT_EQ(v[3], '6');
+ cnt++;
}
+
+ EXPECT_EQ(cnt, 2);
}
TEST_F(DatabaseTest, test_select2) {
}
}
+TEST_F(DatabaseTest, test_select4) {
+ using tizen_base::_;
+ tizen_base::Database db(TEST_DB, SQLITE_OPEN_READWRITE);
+ auto r = db.Exec({ Q_SELECT });
+
+ int cnt = 0;
+ EXPECT_TRUE(static_cast<bool>(r));
+ for (const auto& i : r) {
+ (void)i;
+ cnt++;
+ }
+
+ EXPECT_EQ(cnt, 0);
+}
+
TEST_F(DatabaseTest, test_ToVector) {
SetDefault();
Result(Result&& r) noexcept {
stmt_ = r.stmt_;
r.stmt_ = nullptr;
+ query_ = std::move(r.query_);
+ is_done_ = r.is_done_;
}
Result& operator = (Result&& r) noexcept {
sqlite3_finalize(stmt_);
stmt_ = r.stmt_;
r.stmt_ = nullptr;
+ query_ = std::move(r.query_);
+ is_done_ = r.is_done_;
}
return *this;
};
Iterator begin() const {
+ if (is_done_)
+ return Iterator(nullptr);
return Iterator(stmt_);
}
return query_;
}
+ void SetDone(bool is_done) {
+ is_done_ = is_done;
+ }
+
private:
friend class Database;
- Result(sqlite3_stmt* stmt, sqlite3* db, std::string query)
- : stmt_(stmt), db_(db), query_(std::move(query)) {}
+ Result(sqlite3_stmt* stmt, sqlite3* db, std::string query, bool is_done)
+ : stmt_(stmt), db_(db), query_(std::move(query)), is_done_(is_done) {}
sqlite3_stmt* stmt_ = nullptr;
sqlite3* db_ = nullptr;
std::string query_;
+ bool is_done_;
};
Database(std::string db, int flags) {
int r = sqlite3_prepare_v2(db_, sql.GetQuery().c_str(),
-1, &stmt, nullptr);
if (r != SQLITE_OK) {
- return { nullptr, nullptr, "" };
+ return { nullptr, nullptr, "", true };
}
std::unique_ptr<sqlite3_stmt, decltype(sqlite3_finalize)*> stmt_auto(stmt,
r = sqlite3_step(stmt);
if (r != SQLITE_ROW && r != SQLITE_DONE) {
- return { nullptr, db_, "" };
+ return { nullptr, db_, "", true };
}
- return { stmt_auto.release(), db_, sql.GetQuery() };
+ return { stmt_auto.release(), db_, sql.GetQuery(),
+ r == SQLITE_DONE ? true : false };
}
- bool Exec(const Sql& sql, const Result& previous_stmt) {
+ bool Exec(const Sql& sql, Result& previous_stmt) {
if (sql.GetQuery() != previous_stmt.GetQuery())
throw DbException("Query is different");
if (r != SQLITE_ROW && r != SQLITE_DONE)
return false;
+ previous_stmt.SetDone(r == SQLITE_DONE ? true : false);
return true;
}