[core] Move lastInsertRowId/changes to sqlite::Statement

This commit is contained in:
Bruno de Oliveira Abinader
2017-01-04 11:09:45 -04:00
parent 97b433edc9
commit 80d72123df
4 changed files with 44 additions and 20 deletions

View File

@@ -56,6 +56,8 @@ public:
}
sqlite3_stmt* stmt = nullptr;
int64_t lastInsertRowId = 0;
int64_t changes = 0;
};
template <typename T>
@@ -133,16 +135,6 @@ Statement Database::prepare(const char *query) {
return Statement(this, query);
}
int64_t Database::lastInsertRowid() const {
assert(impl);
return sqlite3_last_insert_rowid(impl->db);
}
uint64_t Database::changes() const {
assert(impl);
return sqlite3_changes(impl->db);
}
Statement::Statement(Database *db, const char *sql)
: impl(std::make_unique<StatementImpl>(db->impl->db, sql))
{
@@ -292,6 +284,8 @@ void Statement::bind(
bool Statement::run() {
assert(impl);
const int err = sqlite3_step(impl->stmt);
impl->lastInsertRowId = sqlite3_last_insert_rowid(sqlite3_db_handle(impl->stmt));
impl->changes = sqlite3_changes(sqlite3_db_handle(impl->stmt));
if (err == SQLITE_DONE) {
return false;
} else if (err == SQLITE_ROW) {
@@ -390,6 +384,17 @@ void Statement::clearBindings() {
sqlite3_clear_bindings(impl->stmt);
}
int64_t Statement::lastInsertRowId() const {
assert(impl);
return impl->lastInsertRowId;
}
uint64_t Statement::changes() const {
assert(impl);
auto changes = impl->changes;
return (changes < 0 ? 0 : changes);
}
Transaction::Transaction(Database& db_, Mode mode)
: db(db_) {
switch (mode) {