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>