Snippets

Mark Howison sqlite3_info

Created by Mark Howison
#!/usr/bin/env python
"""
sqlite3_info: prints info from sqlite3 file header

usage:

$ sqlite3_info /gpfs/data/cdunn/analyses/agalma-siphonophora-20151130.sqlite
header: SQLite format 3
page size: 1024
file format write version: 2 (WAL)
file format read version: 2 (WAL)
unused reserved space: 0
maximum embedded payload fraction: 64
minimum embedded payload fraction: 32
leaf payload fraction: 32
file change counter: 126
size in pages: 1317651
first freelist trunk page: 0
freelist pages: 0
schema cookie: 53
schema format number: 4
default page cache size: 0
largest root b-tree page: 0
database text encoding: 1 (UTF-8)
user version: 0
incremental-vacuum mode: 0
application_id: 0
version-valid-for number: 126
SQLITE_VERSION_NUMBER: 3008003
"""

import sys

file_format = { 1: "(legacy)", 2: "(WAL)" }
text_encoding = { 1: "(UTF-8)", 2: "(UTF-16le)", 3: "(UTF-16be)" }

header = open(sys.argv[1], "rb").read(100)

def read_header(offset, size=1):
  value = 0
  multiplier = 1
  for byte in header[offset:offset+size][::-1]:
    value += multiplier * ord(byte)
    multiplier *= 256
  return value

print "header:", header[:15]
assert header[15] == '\000'
print "page size:", read_header(16, 2)
print "file format write version:", read_header(18), file_format.get(read_header(18), "(unknown)")
print "file format read version:", read_header(19), file_format.get(read_header(19), "(unknown)")
print "unused reserved space:", read_header(20)
print "maximum embedded payload fraction:", read_header(21)
print "minimum embedded payload fraction:", read_header(22)
print "leaf payload fraction:", read_header(23)
print "file change counter:", read_header(24, 4)
print "size in pages:", read_header(28, 4)
print "first freelist trunk page:", read_header(32, 4)
print "freelist pages:", read_header(36, 4)
print "schema cookie:", read_header(40, 4)
print "schema format number:", read_header(44, 4)
print "default page cache size:", read_header(48, 4)
print "largest root b-tree page:", read_header(52, 4)
print "database text encoding:", read_header(56, 4), text_encoding.get(read_header(56, 4), "(unknown)")
print "user version:", read_header(60, 4)
print "incremental-vacuum mode:", read_header(64, 4)
print "application_id:", read_header(68, 4)
print "version-valid-for number:", read_header(92, 4)
print "SQLITE_VERSION_NUMBER:", read_header(96, 4)

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.