Skip to content

Commit 6c1c83f

Browse files
authored
Merge pull request #229 from powersync-ja/query-timeline
Add a debugMode flag to log queries to the performance timeline
2 parents 79eaa25 + 05f3dbd commit 6c1c83f

File tree

4 files changed

+35
-1
lines changed

4 files changed

+35
-1
lines changed

.changeset/spicy-poems-complain.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@powersync/common': minor
3+
'@powersync/web': minor
4+
---
5+
6+
Add debugMode flag to log queries on the performance timeline

packages/common/src/client/SQLOpenFactory.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,17 @@ export interface SQLOpenOptions {
99
* Directory where the database file is located.
1010
*/
1111
dbLocation?: string;
12+
13+
/**
14+
* Enable debugMode to log queries to the performance timeline.
15+
*
16+
* Defaults to false.
17+
*
18+
* To enable in development builds, use:
19+
*
20+
* debugMode: process.env.NODE_ENV !== 'production'
21+
*/
22+
debugMode?: boolean;
1223
}
1324

1425
export interface SQLOpenFactory {

packages/web/src/db/adapters/wa-sqlite/WASQLiteDBAdapter.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,28 @@ export class WASQLiteDBAdapter extends BaseObserver<DBAdapterListener> implement
3939
private logger: ILogger;
4040
private dbGetHelpers: DBGetUtils | null;
4141
private methods: DBFunctionsInterface | null;
42+
private debugMode: boolean;
4243

4344
constructor(protected options: WASQLiteDBAdapterOptions) {
4445
super();
4546
this.logger = Logger.get('WASQLite');
4647
this.dbGetHelpers = null;
4748
this.methods = null;
49+
this.debugMode = options.debugMode ?? false;
50+
if (this.debugMode) {
51+
const originalExecute = this._execute.bind(this);
52+
this._execute = async (sql, bindings) => {
53+
const start = performance.now();
54+
try {
55+
const r = await originalExecute(sql, bindings);
56+
performance.measure(`[SQL] ${sql}`, { start });
57+
return r;
58+
} catch (e: any) {
59+
performance.measure(`[SQL] [ERROR: ${e.message}] ${sql}`, { start });
60+
throw e;
61+
}
62+
};
63+
}
4864
this.initialized = this.init();
4965
this.dbGetHelpers = this.generateDBHelpers({
5066
execute: (query, params) => this.acquireLock(() => this._execute(query, params))

tools/diagnostics-app/src/library/powersync/ConnectionManager.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ export const schemaManager = new DynamicSchemaManager();
2525

2626
export const db = new PowerSyncDatabase({
2727
database: {
28-
dbFilename: 'example.db'
28+
dbFilename: 'example.db',
29+
debugMode: true
2930
},
3031
schema: schemaManager.buildSchema()
3132
});

0 commit comments

Comments
 (0)