mirror of
https://github.com/cuberite/SQLiteCpp.git
synced 2025-08-06 02:36:04 -04:00
Added a Database::getTotalChanges() method and unit test
This commit is contained in:
parent
78ea5b254f
commit
268b111817
@ -229,6 +229,16 @@ public:
|
|||||||
return sqlite3_last_insert_rowid(mpSQLite);
|
return sqlite3_last_insert_rowid(mpSQLite);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get total number of rows modified by all INSERT, UPDATE or DELETE statement since connection.
|
||||||
|
*
|
||||||
|
* @return Total number of rows modified since connection to the database. DROP tables does not count.
|
||||||
|
*/
|
||||||
|
inline int getTotalChanges() const noexcept // nothrow
|
||||||
|
{
|
||||||
|
return sqlite3_total_changes(mpSQLite);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Return the filename used to open the database
|
* @brief Return the filename used to open the database
|
||||||
*/
|
*/
|
||||||
|
@ -68,43 +68,53 @@ TEST(Database, ctorExecAndGet) {
|
|||||||
// but its return is an undefined value for "CREATE TABLE" statements.
|
// but its return is an undefined value for "CREATE TABLE" statements.
|
||||||
db.exec("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)");
|
db.exec("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)");
|
||||||
EXPECT_EQ(0, db.getLastInsertRowid());
|
EXPECT_EQ(0, db.getLastInsertRowid());
|
||||||
|
EXPECT_EQ(0, db.getTotalChanges());
|
||||||
|
|
||||||
// first row : insert the "first" text value into new row of id 1
|
// first row : insert the "first" text value into new row of id 1
|
||||||
EXPECT_EQ(1, db.exec("INSERT INTO test VALUES (NULL, \"first\")"));
|
EXPECT_EQ(1, db.exec("INSERT INTO test VALUES (NULL, \"first\")"));
|
||||||
EXPECT_EQ(1, db.getLastInsertRowid());
|
EXPECT_EQ(1, db.getLastInsertRowid());
|
||||||
|
EXPECT_EQ(1, db.getTotalChanges());
|
||||||
|
|
||||||
// second row : insert the "second" text value into new row of id 2
|
// second row : insert the "second" text value into new row of id 2
|
||||||
EXPECT_EQ(1, db.exec("INSERT INTO test VALUES (NULL, \"second\")"));
|
EXPECT_EQ(1, db.exec("INSERT INTO test VALUES (NULL, \"second\")"));
|
||||||
EXPECT_EQ(2, db.getLastInsertRowid());
|
EXPECT_EQ(2, db.getLastInsertRowid());
|
||||||
|
EXPECT_EQ(2, db.getTotalChanges());
|
||||||
|
|
||||||
// third row : insert the "third" text value into new row of id 3
|
// third row : insert the "third" text value into new row of id 3
|
||||||
EXPECT_EQ(1, db.exec("INSERT INTO test VALUES (NULL, \"third\")"));
|
EXPECT_EQ(1, db.exec("INSERT INTO test VALUES (NULL, \"third\")"));
|
||||||
EXPECT_EQ(3, db.getLastInsertRowid());
|
EXPECT_EQ(3, db.getLastInsertRowid());
|
||||||
|
EXPECT_EQ(3, db.getTotalChanges());
|
||||||
|
|
||||||
// update the second row : update text value to "second_updated"
|
// update the second row : update text value to "second_updated"
|
||||||
EXPECT_EQ(1, db.exec("UPDATE test SET value=\"second-updated\" WHERE id='2'"));
|
EXPECT_EQ(1, db.exec("UPDATE test SET value=\"second-updated\" WHERE id='2'"));
|
||||||
EXPECT_EQ(3, db.getLastInsertRowid()); // last inserted row ID is still 3
|
EXPECT_EQ(3, db.getLastInsertRowid()); // last inserted row ID is still 3
|
||||||
|
EXPECT_EQ(4, db.getTotalChanges());
|
||||||
|
|
||||||
// delete the third row
|
// delete the third row
|
||||||
EXPECT_EQ(1, db.exec("DELETE FROM test WHERE id='3'"));
|
EXPECT_EQ(1, db.exec("DELETE FROM test WHERE id='3'"));
|
||||||
EXPECT_EQ(3, db.getLastInsertRowid());
|
EXPECT_EQ(3, db.getLastInsertRowid());
|
||||||
|
EXPECT_EQ(5, db.getTotalChanges());
|
||||||
|
|
||||||
// drop the whole table, ie the two remaining columns
|
// drop the whole table, ie the two remaining columns
|
||||||
// NOTE: here exec() returns 1, like the last time, as it is an undefined value for "DROP TABLE" statements
|
// NOTE: here exec() returns 1, like the last time, as it is an undefined value for "DROP TABLE" statements
|
||||||
db.exec("DROP TABLE IF EXISTS test");
|
db.exec("DROP TABLE IF EXISTS test");
|
||||||
EXPECT_FALSE(db.tableExists("test"));
|
EXPECT_FALSE(db.tableExists("test"));
|
||||||
|
EXPECT_EQ(5, db.getTotalChanges());
|
||||||
|
|
||||||
// Re-Create the same table
|
// Re-Create the same table
|
||||||
// NOTE: here exec() returns 1, like the last time, as it is an undefined value for "CREATE TABLE" statements
|
// NOTE: here exec() returns 1, like the last time, as it is an undefined value for "CREATE TABLE" statements
|
||||||
db.exec("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)");
|
db.exec("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)");
|
||||||
|
EXPECT_EQ(5, db.getTotalChanges());
|
||||||
|
|
||||||
// insert two rows with two *different* statements => returns only 1, ie. for the second INSERT statement
|
// insert two rows with two *different* statements => returns only 1, ie. for the second INSERT statement
|
||||||
EXPECT_EQ(1, db.exec("INSERT INTO test VALUES (NULL, \"first\");INSERT INTO test VALUES (NULL, \"second\");"));
|
EXPECT_EQ(1, db.exec("INSERT INTO test VALUES (NULL, \"first\");INSERT INTO test VALUES (NULL, \"second\");"));
|
||||||
EXPECT_EQ(2, db.getLastInsertRowid());
|
EXPECT_EQ(2, db.getLastInsertRowid());
|
||||||
|
EXPECT_EQ(7, db.getTotalChanges());
|
||||||
|
|
||||||
// insert two rows with only one statement => returns 2
|
// insert two rows with only one statement => returns 2
|
||||||
EXPECT_EQ(2, db.exec("INSERT INTO test VALUES (NULL, \"third\"), (NULL, \"fourth\");"));
|
EXPECT_EQ(2, db.exec("INSERT INTO test VALUES (NULL, \"third\"), (NULL, \"fourth\");"));
|
||||||
EXPECT_EQ(4, db.getLastInsertRowid());
|
EXPECT_EQ(4, db.getLastInsertRowid());
|
||||||
|
EXPECT_EQ(9, db.getTotalChanges());
|
||||||
|
|
||||||
} // Close DB test.db3
|
} // Close DB test.db3
|
||||||
remove("test.db3");
|
remove("test.db3");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user