Overview
Comment: | Speculative fix for transaction crash. Check if there is a transaction before proceeding. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | v1.80 |
Files: | files | file ages | folders |
SHA1: |
e8d8a38e49b3512e2cfcba9c4a9ea442 |
User & Date: | mrwellan on 2023-03-01 21:29:17 |
Other Links: | branch diff | manifest | tags |
Context
2023-03-02
| ||
19:12 | Locking of db check-in: 494cb9b035 user: mrwellan tags: v1.80 | |
2023-03-01
| ||
21:29 | Speculative fix for transaction crash. Check if there is a transaction before proceeding. check-in: e8d8a38e49 user: mrwellan tags: v1.80 | |
10:22 | Added template for dashboard-transport-mode.scm check-in: 50f20490df user: mrwellan tags: v1.80 | |
Changes
Modified dbmod.scm from [cad5788f26] to [982e41ee49].
︙ | ︙ | |||
343 344 345 346 347 348 349 | ;; mode = 'full, 'incr ;; (define (dbmod:attach-sync tables dbh destdbfile direction #!key (mode 'full) (no-update '("keys")) ;; do ) (debug:print 0 *default-log-port* "Doing sync "direction" "destdbfile) | > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > | | | | | | | | | < > > | | | 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 | ;; mode = 'full, 'incr ;; (define (dbmod:attach-sync tables dbh destdbfile direction #!key (mode 'full) (no-update '("keys")) ;; do ) (debug:print 0 *default-log-port* "Doing sync "direction" "destdbfile) (if (not (sqlite3:auto-committing? dbh)) (debug:print 0 *default-log-port* "Skipping sync due to transaction in flight.") (let* ((table-names (map car tables)) (dest-exists (file-exists? destdbfile))) (assert dest-exists "FATAL: sync called with non-existant file, "destdbfile) ;; attach the destdbfile ;; for each table ;; insert into dest.<table> select * from src.<table> where last_update>last_update ;; done (debug:print 0 *default-log-port* "Attaching "destdbfile" as auxdb") (sqlite3:execute dbh (conc "ATTACH '"destdbfile"' AS auxdb;")) (for-each (lambda (table) (let* ((tbldat (alist-ref table tables equal?)) (fields (map car tbldat)) (fields-str (string-intersperse fields ",")) (dir (eq? direction 'todest)) (fromdb (if dir "" "auxdb.")) (todb (if dir "auxdb." "")) (stmt1 (conc "INSERT OR IGNORE INTO "todb table " SELECT * FROM "fromdb table";")) (stmt2 (conc "INSERT OR REPLACE INTO "todb table " SELECT * FROM "fromdb table" WHERE " fromdb table".last_update > " todb table".last_update;")) (stmt3 (conc "INSERT OR REPLACE INTO "todb"."table " SELECT * FROM "fromdb table";")) (stmt4 (conc "DELETE FROM "todb table" WHERE "fromdb table ".last_update > "todb table".last_update;")) (stmt5 (conc "DELETE FROM "todb table";")) (stmt6 (conc "INSERT OR REPLACE INTO "todb table" ("fields-str") SELECT "fields-str" FROM "fromdb table";")) (start-ms (current-milliseconds))) ;; (if (not (has-last-update dbh table)) ;; (sqlite3:execute dbh (conc "ALTER TABLE "table" ADD COLUMN last_update INTEGER;"))) ;; (if (not (has-last-update dbh (conc "auxdb."table))) ;; (sqlite3:execute dbh (conc "ALTER TABLE auxdb."table" ADD COLUMN last_update INTEGER;"))) (if (sqlite3:auto-committing? dbh) (begin (sqlite3:with-transaction dbh (lambda () (sqlite3:execute dbh stmt5) ;; (sqlite3:execute dbh stmt4) ;; if it worked this would be better for incremental up ;; (sqlite3:execute dbh stmt1) (sqlite3:execute dbh stmt6) )) (debug:print 0 *default-log-port* "Synced table "table " in "(- (current-milliseconds) start-ms)"ms")) (debug:print 0 *default-log-port* "Skipping sync of table "table" due to transaction in flight.")))) table-names) (sqlite3:execute dbh "DETACH auxdb;")))) ;; prefix is "" or "auxdb." ;; ;; (define (dbmod:last-update-patch dbh prefix) ;; (let (( ;;====================================================================== |
︙ | ︙ |