From: Andrey C. <sp...@us...> - 2016-06-05 21:41:19
|
Update of /cvsroot/spf/devel/~ac/lib/lin/sql In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv24839 Modified Files: sqlite3.f Log Message: РпоÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð²ÐµÑÑиÑÑ SQLite вÑзов backup-ÑÑнкÑий Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²ÐµÑÑиÑÑÑÑ Ð¾Ñибкой SQLITE_READONLY, еÑли не ÑовпадаÑÑ ÑазмеÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð´Ð²ÑÑ Ð±Ð°Ð·. Ð ÑÑом ÑлÑÑае ÑÑаÑÑй backup Ð¼Ñ Ð±Ñдем не пеÑезапиÑÑваÑÑ, а ÑдалÑÑÑ Ð¸ делаÑÑ Ð¿Ð¾Ð²ÑоÑнÑÑ Ð¿Ð¾Ð¿ÑÑкÑ. Index: sqlite3.f =================================================================== RCS file: /cvsroot/spf/devel/~ac/lib/lin/sql/sqlite3.f,v retrieving revision 1.46 retrieving revision 1.47 diff -u -d -r1.46 -r1.47 --- sqlite3.f 4 Dec 2015 15:39:13 -0000 1.46 +++ sqlite3.f 5 Jun 2016 21:41:17 -0000 1.47 @@ -67,6 +67,7 @@ sqh 1 sqlite3_errmsg ASCIIZ> DB3_DEBUG @ IF 2DUP TYPE CR THEN " {s}" STR@ ER-U ! ER-A ! sqh 1 sqlite3_errcode DUP 1 = IF DROP -2 ELSE 30000 + THEN ( ior ) + DUP 30000 = IF DROP EXIT THEN \ è sqlite3_errmsg ãîâîðèò "not an error" THROW THEN \ ior THROW ( ior ïî÷òè âñåãäà 1 â ñëó÷àå îøèáêè) @@ -424,23 +425,41 @@ : db3_shared_cache ( -- ) 1 1 sqlite3_enable_shared_cache DROP ; -: db3_backup_to { addr u sqh \ sd b -- } +: (db3_backup_to) { addr u sqh \ sd b -- } \ çàïèñàòü êîïèþ ÁÄ èç õýíäëà sqh â db3-ôàéë ñ èìåíåì addr u addr u db3_open -> sd S" main" DROP sqh S" main" DROP sd 4 sqlite3_backup_init -> b b 0= IF 5 S" sqlite3_backup_init" sd db3_error? THEN BEGIN \ æäåì îñâîáîæäåíèÿ äîñòóïà ê ÁÄ - -1 b 2 sqlite3_backup_step DUP SQLITE_BUSY = + -1 b 2 sqlite3_backup_step + DUP SQLITE_BUSY = WHILE DB3_DEBUG @ IF ." DB3_BACKUP_WAIT" b . THEN DROP 100 PAUSE \ ^ waitcnt 1+! REPEAT - 101 ( SQLITE_DONE ) <> IF 5 S" sqlite3_backup_step" sd db3_error? THEN + 101 ( SQLITE_DONE ) <> + IF + b 1 sqlite3_backup_finish DROP + 5 S" sqlite3_backup_step" sd ['] db3_error? CATCH + sd db3_close + THROW + THEN b 1 sqlite3_backup_finish ?DUP IF S" sqlite3_backup_finish" sd db3_error? THEN sd db3_close ; +: db3_backup_to { addr u sqh \ sd b -- } + addr u sqh ['] (db3_backup_to) CATCH ?DUP + IF NIP NIP NIP + ." db3_backup failed: " DUP . addr u TYPE CR + 30008 = \ çàïèñü â read-only ÁÄ èëè íåñîîòâåòñòâèå page_size (â íîâûõ sqlite èçìåíèëè ñ 1Ê íà 4Ê) + IF addr u DELETE-FILE ." deleted: " . CR + addr u sqh ['] (db3_backup_to) CATCH ?DUP + IF ." second attempt failed too: " . CR DROP 2DROP THEN + THEN + THEN +; PREVIOUS PREVIOUS : '>` ( addr u -- ) |