@@ -834,9 +834,17 @@ KJ_TEST("SQLite observer addQueryStats") {
834834 uint64_t rowsWritten = 0 ;
835835 };
836836
837+ class TestQueryStatsRegulator : public SqliteDatabase ::Regulator {
838+ public:
839+ bool shouldAddQueryStats () const override {
840+ return true ;
841+ }
842+ };
843+
837844 TempDirOnDisk dir;
838845 SqliteDatabase::Vfs vfs (*dir);
839846 TestSqliteObserver sqliteObserver = TestSqliteObserver ();
847+ TestQueryStatsRegulator regulator;
840848 SqliteDatabase db (
841849 vfs, kj::Path ({" foo" }), kj::WriteMode::CREATE | kj::WriteMode::MODIFY, sqliteObserver);
842850
@@ -851,17 +859,17 @@ KJ_TEST("SQLite observer addQueryStats") {
851859 int rowsWrittenBefore = sqliteObserver.rowsWritten ;
852860 constexpr int dbRowCount = 3 ;
853861 {
854- db.run (" INSERT INTO things (id) VALUES (10)" );
855- db.run (" INSERT INTO things (id) VALUES (11)" );
856- db.run (" INSERT INTO things (id) VALUES (12)" );
862+ db.run (regulator, " INSERT INTO things (id) VALUES (10)" );
863+ db.run (regulator, " INSERT INTO things (id) VALUES (11)" );
864+ db.run (regulator, " INSERT INTO things (id) VALUES (12)" );
857865 }
858866 KJ_EXPECT (sqliteObserver.rowsRead - rowsReadBefore == dbRowCount);
859867 KJ_EXPECT (sqliteObserver.rowsWritten - rowsWrittenBefore == dbRowCount);
860868
861869 rowsReadBefore = sqliteObserver.rowsRead ;
862870 rowsWrittenBefore = sqliteObserver.rowsWritten ;
863871 {
864- auto getCount = db.prepare (" SELECT COUNT(*) FROM things" );
872+ auto getCount = db.prepare (regulator, " SELECT COUNT(*) FROM things" );
865873 KJ_EXPECT (getCount.run ().getInt (0 ) == dbRowCount);
866874 }
867875 KJ_EXPECT (sqliteObserver.rowsRead - rowsReadBefore == dbRowCount);
@@ -871,7 +879,7 @@ KJ_TEST("SQLite observer addQueryStats") {
871879 rowsReadBefore = sqliteObserver.rowsRead ;
872880 rowsWrittenBefore = sqliteObserver.rowsWritten ;
873881 {
874- auto stmt = db.prepare (" SELECT * FROM things" );
882+ auto stmt = db.prepare (regulator, " SELECT * FROM things" );
875883 auto query = stmt.run ();
876884 KJ_ASSERT (!query.isDone ());
877885 while (!query.isDone ()) {
@@ -881,11 +889,24 @@ KJ_TEST("SQLite observer addQueryStats") {
881889 KJ_EXPECT (sqliteObserver.rowsRead - rowsReadBefore == dbRowCount);
882890 KJ_EXPECT (sqliteObserver.rowsWritten - rowsWrittenBefore == 0 );
883891
892+ // Verify system queries don't affect stats.
893+ rowsReadBefore = sqliteObserver.rowsRead ;
894+ rowsWrittenBefore = sqliteObserver.rowsWritten ;
895+ db.run (" INSERT INTO things (id) VALUES (13)" );
896+ {
897+ auto query = db.run (" SELECT * FROM things" );
898+ while (!query.isDone ()) {
899+ query.nextRow ();
900+ }
901+ }
902+ KJ_EXPECT (sqliteObserver.rowsRead == rowsReadBefore);
903+ KJ_EXPECT (sqliteObserver.rowsWritten == rowsWrittenBefore);
904+
884905 // Verify addQueryStats works correctly when db is reset
885906 rowsReadBefore = sqliteObserver.rowsRead ;
886907 rowsWrittenBefore = sqliteObserver.rowsWritten ;
887908 {
888- auto query = db.run (" INSERT INTO things (id) VALUES (100)" );
909+ auto query = db.run (regulator, " INSERT INTO things (id) VALUES (100)" );
889910 db.reset ();
890911 }
891912 KJ_EXPECT (sqliteObserver.rowsRead - rowsReadBefore == 1 );
0 commit comments