Witam,
Wczoraj miałem taki ciekawy problem z automatyczną aktualizacją bazy z 1.2.1 do 1.3.3, że pierwszy plik (mysql.2004030800.php) wykonywał się jak należy (i któryś tam podobnie) ale już pozostałe twierdziły, że access denied dla usera lms@localhost (nie wiem dlaczego tak się działo jako, że z palca user ten z tym samym hasłem co w lms.ini ma dostęp do bazy lms bezproblemowy).
W efekcie lądowałem z dbversion=jakimśtam podczas gdy nie wszystkie poprzednie inkrementalne aktualizacje zostały poprawnie zaaplikowane.
W związku z tym propozycja zmian w upgradedb.php: na poczatek - START TRANSACTION (BeginTrans()) - includujemy wszystkie potrzebne *.sql gdzie w każdym z tych sqli jest ustawiana zmienna odpowiedzialna za poprawność wykonania poleceń, coś w stylu: $rc =& $DB->Execute("ALTER TABLE rtmessages ADD createtime INT(11) DEFAULT 0 NOT NULL"); - if $rc != 0 ROLLBACK (chyba nie ma tego LMSDB ale nie powinno być problemu z implementacją) else COMMIT (CommitTrans())
Innymi słowy albo się upgrade bazy powiedzie w całości albo w ogóle - nie będzie pośrednich stanów nie wiadomo czego.
AFAIK z supportowanych baz to tylko mysql3 nie ma rollback ale to pewnie mozna na poziomie LMSDB załatwić.
Sensowne?