Annotation of embedaddon/sqlite3/doc/pager-invariants.txt, revision 1.1
1.1 ! misho 1: *** Throughout this document, a page is deemed to have been synced
! 2: automatically as soon as it is written when PRAGMA synchronous=OFF.
! 3: Otherwise, the page is not synced until the xSync method of the VFS
! 4: is called successfully on the file containing the page.
! 5:
! 6: *** Definition: A page of the database file is said to be "overwriteable" if
! 7: one or more of the following are true about the page:
! 8:
! 9: (a) The original content of the page as it was at the beginning of
! 10: the transaction has been written into the rollback journal and
! 11: synced.
! 12:
! 13: (b) The page was a freelist leaf page at the start of the transaction.
! 14:
! 15: (c) The page number is greater than the largest page that existed in
! 16: the database file at the start of the transaction.
! 17:
! 18: (1) A page of the database file is never overwritten unless one of the
! 19: following are true:
! 20:
! 21: (a) The page and all other pages on the same sector are overwriteable.
! 22:
! 23: (b) The atomic page write optimization is enabled, and the entire
! 24: transaction other than the update of the transaction sequence
! 25: number consists of a single page change.
! 26:
! 27: (2) The content of a page written into the rollback journal exactly matches
! 28: both the content in the database when the rollback journal was written
! 29: and the content in the database at the beginning of the current
! 30: transaction.
! 31:
! 32: (3) Writes to the database file are an integer multiple of the page size
! 33: in length and are aligned to a page boundary.
! 34:
! 35: (4) Reads from the database file are either aligned on a page boundary and
! 36: an integer multiple of the page size in length or are taken from the
! 37: first 100 bytes of the database file.
! 38:
! 39: (5) All writes to the database file are synced prior to the rollback journal
! 40: being deleted, truncated, or zeroed.
! 41:
! 42: (6) If a master journal file is used, then all writes to the database file
! 43: are synced prior to the master journal being deleted.
! 44:
! 45: *** Definition: Two databases (or the same database at two points it time)
! 46: are said to be "logically equivalent" if they give the same answer to
! 47: all queries. Note in particular the the content of freelist leaf
! 48: pages can be changed arbitarily without effecting the logical equivalence
! 49: of the database.
! 50:
! 51: (7) At any time, if any subset, including the empty set and the total set,
! 52: of the unsynced changes to a rollback journal are removed and the
! 53: journal is rolled back, the resulting database file will be logical
! 54: equivalent to the database file at the beginning of the transaction.
! 55:
! 56: (8) When a transaction is rolled back, the xTruncate method of the VFS
! 57: is called to restore the database file to the same size it was at
! 58: the beginning of the transaction. (In some VFSes, the xTruncate
! 59: method is a no-op, but that does not change the fact the SQLite will
! 60: invoke it.)
! 61:
! 62: (9) Whenever the database file is modified, at least one bit in the range
! 63: of bytes from 24 through 39 inclusive will be changed prior to releasing
! 64: the EXCLUSIVE lock.
! 65:
! 66: (10) The pattern of bits in bytes 24 through 39 shall not repeat in less
! 67: than one billion transactions.
! 68:
! 69: (11) A database file is well-formed at the beginning and at the conclusion
! 70: of every transaction.
! 71:
! 72: (12) An EXCLUSIVE lock must be held on the database file before making
! 73: any changes to the database file.
! 74:
! 75: (13) A SHARED lock must be held on the database file before reading any
! 76: content out of the database file.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>