Fossil SCM

Enhance the --sqltrace option to show the elapse time used by each SQL statement in milliseconds.

drh 2020-02-13 19:43 trunk
Commit ada305fbc0c2e1d108f503bd8322621d67edefe12c9ba6aad4c46c5fc0f3b8f1
1 file changed +11 -2
+11 -2
--- src/db.c
+++ src/db.c
@@ -1258,11 +1258,11 @@
12581258
db, "is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
12591259
);
12601260
sqlite3_create_function(
12611261
db, "if_selected", 3, SQLITE_UTF8, 0, file_is_selected,0,0
12621262
);
1263
- if( g.fSqlTrace ) sqlite3_trace_v2(db, SQLITE_TRACE_STMT, db_sql_trace, 0);
1263
+ if( g.fSqlTrace ) sqlite3_trace_v2(db, SQLITE_TRACE_PROFILE, db_sql_trace, 0);
12641264
db_add_aux_functions(db);
12651265
re_add_sql_func(db); /* The REGEXP operator */
12661266
foci_register(db); /* The "files_of_checkin" virtual table */
12671267
sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
12681268
return db;
@@ -2316,14 +2316,23 @@
23162316
LOCAL int db_sql_trace(unsigned m, void *notUsed, void *pP, void *pX){
23172317
sqlite3_stmt *pStmt = (sqlite3_stmt*)pP;
23182318
char *zSql;
23192319
int n;
23202320
const char *zArg = (const char*)pX;
2321
+ char zEnd[40];
23212322
if( zArg[0]=='-' ) return 0;
2323
+ if( m & SQLITE_TRACE_PROFILE ){
2324
+ sqlite3_int64 nNano = *(sqlite3_int64*)pX;
2325
+ double rMillisec = 0.000001 * nNano;
2326
+ sqlite3_snprintf(sizeof(zEnd),zEnd," /* %.3fms */\n", rMillisec);
2327
+ }else{
2328
+ zEnd[0] = '\n';
2329
+ zEnd[1] = 0;
2330
+ }
23222331
zSql = sqlite3_expanded_sql(pStmt);
23232332
n = (int)strlen(zSql);
2324
- fossil_trace("%s%s\n", zSql, (n>0 && zSql[n-1]==';') ? "" : ";");
2333
+ fossil_trace("%s%s%s", zSql, (n>0 && zSql[n-1]==';') ? "" : ";", zEnd);
23252334
sqlite3_free(zSql);
23262335
return 0;
23272336
}
23282337
23292338
/*
23302339
--- src/db.c
+++ src/db.c
@@ -1258,11 +1258,11 @@
1258 db, "is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
1259 );
1260 sqlite3_create_function(
1261 db, "if_selected", 3, SQLITE_UTF8, 0, file_is_selected,0,0
1262 );
1263 if( g.fSqlTrace ) sqlite3_trace_v2(db, SQLITE_TRACE_STMT, db_sql_trace, 0);
1264 db_add_aux_functions(db);
1265 re_add_sql_func(db); /* The REGEXP operator */
1266 foci_register(db); /* The "files_of_checkin" virtual table */
1267 sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
1268 return db;
@@ -2316,14 +2316,23 @@
2316 LOCAL int db_sql_trace(unsigned m, void *notUsed, void *pP, void *pX){
2317 sqlite3_stmt *pStmt = (sqlite3_stmt*)pP;
2318 char *zSql;
2319 int n;
2320 const char *zArg = (const char*)pX;
 
2321 if( zArg[0]=='-' ) return 0;
 
 
 
 
 
 
 
 
2322 zSql = sqlite3_expanded_sql(pStmt);
2323 n = (int)strlen(zSql);
2324 fossil_trace("%s%s\n", zSql, (n>0 && zSql[n-1]==';') ? "" : ";");
2325 sqlite3_free(zSql);
2326 return 0;
2327 }
2328
2329 /*
2330
--- src/db.c
+++ src/db.c
@@ -1258,11 +1258,11 @@
1258 db, "is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
1259 );
1260 sqlite3_create_function(
1261 db, "if_selected", 3, SQLITE_UTF8, 0, file_is_selected,0,0
1262 );
1263 if( g.fSqlTrace ) sqlite3_trace_v2(db, SQLITE_TRACE_PROFILE, db_sql_trace, 0);
1264 db_add_aux_functions(db);
1265 re_add_sql_func(db); /* The REGEXP operator */
1266 foci_register(db); /* The "files_of_checkin" virtual table */
1267 sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
1268 return db;
@@ -2316,14 +2316,23 @@
2316 LOCAL int db_sql_trace(unsigned m, void *notUsed, void *pP, void *pX){
2317 sqlite3_stmt *pStmt = (sqlite3_stmt*)pP;
2318 char *zSql;
2319 int n;
2320 const char *zArg = (const char*)pX;
2321 char zEnd[40];
2322 if( zArg[0]=='-' ) return 0;
2323 if( m & SQLITE_TRACE_PROFILE ){
2324 sqlite3_int64 nNano = *(sqlite3_int64*)pX;
2325 double rMillisec = 0.000001 * nNano;
2326 sqlite3_snprintf(sizeof(zEnd),zEnd," /* %.3fms */\n", rMillisec);
2327 }else{
2328 zEnd[0] = '\n';
2329 zEnd[1] = 0;
2330 }
2331 zSql = sqlite3_expanded_sql(pStmt);
2332 n = (int)strlen(zSql);
2333 fossil_trace("%s%s%s", zSql, (n>0 && zSql[n-1]==';') ? "" : ";", zEnd);
2334 sqlite3_free(zSql);
2335 return 0;
2336 }
2337
2338 /*
2339

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button