diff options
Diffstat (limited to 'src/cuirass/database.scm')
-rw-r--r-- | src/cuirass/database.scm | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm index 8cc9376..666a20b 100644 --- a/src/cuirass/database.scm +++ b/src/cuirass/database.scm @@ -34,12 +34,15 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-19) #:use-module (srfi srfi-26) + #:use-module (system foreign) + #:use-module (rnrs bytevectors) #:use-module (sqlite3) #:export (;; Procedures. db-init db-open db-close db-optimize + db-log-queries db-add-specification db-remove-specification db-get-specification @@ -303,6 +306,21 @@ database object." (sqlite-exec db "PRAGMA wal_checkpoint(TRUNCATE);") (db-close db))) +(define (trace-callback trace p x) + (log-query (pointer->string + (sqlite-expanded-sql p)) + (make-time 'time-duration + (bytevector-uint-ref + (pointer->bytevector x (sizeof uint64)) + 0 (native-endianness) + (sizeof uint64)) + 0))) + +(define (db-log-queries file) + (with-db-worker-thread db + (query-logging-port (open-output-file file)) + (sqlite-trace db SQLITE_TRACE_PROFILE trace-callback))) + (define (last-insert-rowid db) (vector-ref (car (sqlite-exec db "SELECT last_insert_rowid();")) 0)) |