@@ -834,9 +834,17 @@ KJ_TEST("SQLite observer addQueryStats") {
834
834
uint64_t rowsWritten = 0 ;
835
835
};
836
836
837
+ class TestQueryStatsRegulator : public SqliteDatabase ::Regulator {
838
+ public:
839
+ bool shouldAddQueryStats () const override {
840
+ return true ;
841
+ }
842
+ };
843
+
837
844
TempDirOnDisk dir;
838
845
SqliteDatabase::Vfs vfs (*dir);
839
846
TestSqliteObserver sqliteObserver = TestSqliteObserver ();
847
+ TestQueryStatsRegulator regulator;
840
848
SqliteDatabase db (
841
849
vfs, kj::Path ({" foo" }), kj::WriteMode::CREATE | kj::WriteMode::MODIFY, sqliteObserver);
842
850
@@ -851,17 +859,17 @@ KJ_TEST("SQLite observer addQueryStats") {
851
859
int rowsWrittenBefore = sqliteObserver.rowsWritten ;
852
860
constexpr int dbRowCount = 3 ;
853
861
{
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)" );
857
865
}
858
866
KJ_EXPECT (sqliteObserver.rowsRead - rowsReadBefore == dbRowCount);
859
867
KJ_EXPECT (sqliteObserver.rowsWritten - rowsWrittenBefore == dbRowCount);
860
868
861
869
rowsReadBefore = sqliteObserver.rowsRead ;
862
870
rowsWrittenBefore = sqliteObserver.rowsWritten ;
863
871
{
864
- auto getCount = db.prepare (" SELECT COUNT(*) FROM things" );
872
+ auto getCount = db.prepare (regulator, " SELECT COUNT(*) FROM things" );
865
873
KJ_EXPECT (getCount.run ().getInt (0 ) == dbRowCount);
866
874
}
867
875
KJ_EXPECT (sqliteObserver.rowsRead - rowsReadBefore == dbRowCount);
@@ -871,7 +879,7 @@ KJ_TEST("SQLite observer addQueryStats") {
871
879
rowsReadBefore = sqliteObserver.rowsRead ;
872
880
rowsWrittenBefore = sqliteObserver.rowsWritten ;
873
881
{
874
- auto stmt = db.prepare (" SELECT * FROM things" );
882
+ auto stmt = db.prepare (regulator, " SELECT * FROM things" );
875
883
auto query = stmt.run ();
876
884
KJ_ASSERT (!query.isDone ());
877
885
while (!query.isDone ()) {
@@ -881,11 +889,24 @@ KJ_TEST("SQLite observer addQueryStats") {
881
889
KJ_EXPECT (sqliteObserver.rowsRead - rowsReadBefore == dbRowCount);
882
890
KJ_EXPECT (sqliteObserver.rowsWritten - rowsWrittenBefore == 0 );
883
891
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
+
884
905
// Verify addQueryStats works correctly when db is reset
885
906
rowsReadBefore = sqliteObserver.rowsRead ;
886
907
rowsWrittenBefore = sqliteObserver.rowsWritten ;
887
908
{
888
- auto query = db.run (" INSERT INTO things (id) VALUES (100)" );
909
+ auto query = db.run (regulator, " INSERT INTO things (id) VALUES (100)" );
889
910
db.reset ();
890
911
}
891
912
KJ_EXPECT (sqliteObserver.rowsRead - rowsReadBefore == 1 );
0 commit comments