451
452
453
454
455
456
457
458
459
460
461
462
463
464
|
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
|
+
+
+
|
(define (dbfile:print-err . params)
(with-output-to-port
(current-error-port)
(lambda ()
(apply print params))))
;;
;; converge this with dbmod:safely-open-db
;;
(define (dbfile:cautious-open-database fname init-proc sync-mode journal-mode
#!key (tries-left 500)(force-init #f))
(let* ((busy-file (conc fname "-journal"))
(delay-time (* (- 51 tries-left) 1.1))
(write-access (file-write-access? fname))
(dir-access (file-write-access? (pathname-directory fname)))
(retry (lambda ()
|
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
|
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
|
-
+
|
(sqlite3:execute db (conc "PRAGMA synchronous = "sync-mode";")))
(if journal-mode
(sqlite3:execute db (conc "PRAGMA journal_mode = "journal-mode";")))
(if (and init-proc (or force-init
(not db-exists)))
(init-proc db))
db))
expire-time: 5)
expire-time: 15)
(begin
(if (file-exists? fname )
(let ((db (sqlite3:open-database fname)))
;; pragmas synchronous not needed because this db is used read-only
;; (sqlite3:execute db (conc "PRAGMA synchronous = "mode";")
(sqlite3:set-busy-handler! db (sqlite3:make-busy-timeout 30000)) ;; read-only but still need timeout
db )
|