SIMPLE_SQL_BACKUP

Database backup utilities including online backup API with progress callbacks, memory-to-file and file-to-memory copies.

View Source

Creation

make (a_db: SIMPLE_SQL_DATABASE)
Create backup helper attached to database.

Simple Backup

backup_to_file (a_path: READABLE_STRING_GENERAL)
Create complete backup to file.
restore_from_file (a_path: READABLE_STRING_GENERAL)
Restore database from backup file.

Memory Operations

copy_to_memory: SIMPLE_SQL_DATABASE
Copy file database to in-memory database.
copy_from_memory (a_memory_db: SIMPLE_SQL_DATABASE)
Copy in-memory database to current file database.

SIMPLE_SQL_ONLINE_BACKUP

Online backup with progress tracking for large databases.

View Source

Online Backup

make (a_source: SIMPLE_SQL_DATABASE; a_dest_path: READABLE_STRING_GENERAL)
Create online backup to destination file.
set_progress_callback (a_callback: PROCEDURE [INTEGER, INTEGER])
Set callback receiving (remaining_pages, total_pages).
set_page_step (a_count: INTEGER)
Pages to copy per step (default: 100).
run
Execute backup with progress callbacks.
is_complete: BOOLEAN
Did backup complete successfully?

Examples

Simple Backup

local
    backup: SIMPLE_SQL_BACKUP
do
    create backup.make (db)
    backup.backup_to_file ("backup_2024-01-15.db")
    print ("Backup created%N")
end

Online Backup with Progress

local
    online_backup: SIMPLE_SQL_ONLINE_BACKUP
do
    create online_backup.make (db, "large_backup.db")

    -- Progress callback
    online_backup.set_progress_callback (
        agent (remaining, total: INTEGER)
            local
                pct: REAL_64
            do
                pct := ((total - remaining) / total) * 100
                print ("Backup progress: " + pct.truncated_to_integer.out + "%%%N")
            end
    )

    online_backup.set_page_step (50)  -- Smaller steps for more frequent updates
    online_backup.run

    if online_backup.is_complete then
        print ("Backup complete!%N")
    end
end

Memory to File

local
    mem_db, file_db: SIMPLE_SQL_DATABASE
    backup: SIMPLE_SQL_BACKUP
do
    -- Work with in-memory database
    create mem_db.make_memory
    mem_db.execute ("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)")
    mem_db.insert_into ("test").value ("value", "data").execute

    -- Save to file
    create file_db.make ("saved.db")
    create backup.make (file_db)
    backup.copy_from_memory (mem_db)

    mem_db.close
    file_db.close
end

Load File into Memory

local
    file_db, mem_db: SIMPLE_SQL_DATABASE
    backup: SIMPLE_SQL_BACKUP
do
    -- Load existing database into memory for fast operations
    create file_db.make ("existing.db")
    create backup.make (file_db)
    mem_db := backup.copy_to_memory

    -- Work with fast in-memory copy
    result := mem_db.query ("SELECT * FROM large_table")

    mem_db.close
    file_db.close
end
When to Use Online Backup

Use SIMPLE_SQL_ONLINE_BACKUP for large databases where you need progress feedback or want to perform backup while other operations continue.