SQLite Backup

  • Seit SQLite Version 3.7.4 gibt es die Backup-Funktionen. Im englischen Forum wurde dazu eine einzelne Backup-Funktion erstellt, die mir aber zu unflexibel ist und auch nicht mehr dem Versionsstand entspricht ( dort wird noch die Pagesize abgefragt, was inzwischen überflüssig ist, da Ungleichheiten von den Funktionen selbst korrigiert werden).


    EDIT 2021-08-12:

    In der Backupfunktion für RunningDB wurde Sleep() verwendet, was einen Export dieser Funktion in einen eigenen Prozeß erforderlich machen würde, um tatsächlich im Skript die DB parallel weiterbearbeiten zu können.

    Das habe ich jetzt geändert und verwende eine Adlib-Funktion. Dadurch gibt es natürlich keinen Return mehr von dieser Funktion - zur Abfrage des Funktionsstatus und des letzten Fehlers wurden weitere Funktionen ergänzt.


    EDIT 2021-08-16 v0.3:

    Ich habe zusätzlich noch einen Parameter für Schema-Namen eingefügt, falls nicht Standard (To: "main", From: "Main") verwendet wird. ACHTUNG: script breaking chance! bei _SQLite_Backup_RunningDB() zu Vorversion, da dieser Parameter vor dem Parameter max_Steps eingefügt wurde.

    Beim Laden einer DB in den Speicher ist das Vorbelegen der Handle-Variable mit "-1" nicht mehr erforderlich. Ich prüfe nun ob es ein Pointer ist (somit: Memory to File) oder keiner (somit: File to Memory).


    Ich habe die Dll-Aufrufe in einzelne Funktionen gepackt und zwei unterschiedliche Backup-Funktionen erstellt:


    Nicht ganz unwichtig: Die Zieldateien für das Backup werden ohne Nachfrage überschrieben, sofern sie bereits existieren!




  • Version 0.2


    In der Backupfunktion für RunningDB wurde Sleep() verwendet, was einen Export dieser Funktion in einen eigenen Prozeß erforderlich machen würde, um tatsächlich im Skript die DB parallel weiterbearbeiten zu können.

    Das habe ich jetzt geändert und verwende eine Adlib-Funktion. Dadurch gibt es natürlich keinen Return mehr von dieser Funktion - zur Abfrage des Funktionsstatus und des letzten Fehlers wurden weitere Funktionen ergänzt.


    EDIT: Oops, da war ein (funktionell nicht tragischer) Fehler in der Adlibfunktion

    Zeile 296 muss heissen:

    statt

    $g_Backup_iRet = _SQLite_ErrCode($g_Backup_pFile)

    richtig

    $g_Backup_iErr = _SQLite_ErrCode($g_Backup_pFile)


    Ist im ersten Post und Dateianhang korrigiert.