-- inode table and main entrypoint of the schema CREATE TABLE IF NOT EXISTS inode ( ino INTEGER PRIMARY KEY AUTOINCREMENT, parent INTEGER, name VARCHAR(255), size INTEGER, uid INTEGER, gid INTEGER, mode INTEGER, rdev INTEGER, ctime INTEGER, mtime INTEGER ); CREATE INDEX IF NOT EXISTS parents ON inode (parent); CREATE INDEX IF NOT EXISTS names ON inode (name); -- extra data for each inode for special types (say link targets) CREATE TABLE IF NOT EXISTS extra ( ino INTEGER PRIMARY KEY, data VARCHAR(4096) ); -- blocks per file, order of insertion is important CREATE TABLE IF NOT EXISTS block ( ino INTEGER, id VARCHAR(32), key VARCHAR(32) ); CREATE INDEX IF NOT EXISTS block_ino ON block (ino); -- global flist tags, this can include values like `version`, `description`, `block-size`, etc.. -- it can also hold extra user-defined tags for extensions CREATE TABLE IF NOT EXISTS tag ( key VARCHAR(10) PRIMARY KEY, value VARCHAR(255) ); -- routing table define ranges where blobs can be found. This allows "sharding" by be able to retrieve -- blobs from different partitions using the prefix range (hashes that are ) CREATE TABLE IF NOT EXISTS route ( start integer, -- one byte hash prefix end integer, -- one byte hash prefix url VARCHAR(2048) );