BEGIN EXCLUSIVE; CREATE TABLE branch_epochs ( hash not null unique, -- hash of remaining fields separated by ":" branch not null unique, -- joins with revision_certs.value epoch not null -- random hex-encoded id ); CREATE TABLE db_vars ( domain not null, -- scope of application of a var name not null, -- var key value not null, -- var value unique(domain, name) ); CREATE TABLE file_deltas ( id not null, -- strong hash of file contents base not null, -- joins with files.id or file_deltas.id delta not null, -- rdiff to construct current from base unique(id, base) ); INSERT INTO file_deltas VALUES('5576c85cbfa8770932caa8d01411286f67013f3e','03024287ec276ff6893d9bb7fef7652cb0f6bb15','H4sIAAAAAAAA//NUMDQ05VJQUEjLzElVUCpJLS4BsZS4UitSk0tLQEJFpUAuSAkYINSlZBYp ceUm5pUm5sTnphalA4UrU4shSiGq8vLzUisyi0tS80owDQQAl841yXoAAAA= '); CREATE TABLE files ( id primary key, -- strong hash of file contents data not null -- compressed, encoded contents of a file ); INSERT INTO files VALUES('ee9e51458f4642f48efe956962058245ee7127b1','H4sIAAAAAAAA/0uqTOUCALfFFBMEAAAA '); INSERT INTO files VALUES('55ca6286e3e4f4fba5d0448333fa99fc5a404a73','H4sIAAAAAAAA/8vI5AIAenpv7QMAAAA= '); INSERT INTO files VALUES('03024287ec276ff6893d9bb7fef7652cb0f6bb15','H4sIAAAAAAAA/12MQQqAMAwE73lFyMek6CqBNkKbQP29lgqCexqGYZl51wwWR/NBQuhYwx91 oQkRv/uyTatQSRYpLwX1GLoGZjszOw1dm8P8f3gDz1+AGHIAAAA= '); CREATE TABLE manifest_certs ( hash not null unique, -- hash of remaining fields separated by ":" id not null, -- joins with manifests.id or manifest_deltas.id name not null, -- opaque string chosen by user value not null, -- opaque blob keypair not null, -- joins with public_keys.id signature not null, -- RSA/SHA1 signature of "[name@id:val]" unique(name, id, value, keypair, signature) ); CREATE TABLE manifest_deltas ( id not null, -- strong hash of all the entries in a manifest base not null, -- joins with either manifest.id or manifest_deltas.id delta not null, -- rdiff to construct current from base unique(id, base) ); INSERT INTO manifest_deltas VALUES('aa1a5dc0a155fa44f160964054816556c3e8afd5','598dc864af1811332c3fd4ee249cadddba8ebdcd','H4sIAAAAAAAA/w3KuQGAQAgEwJwqrgQWjsfYyDIQpf8SdOK51mYyC++0vqcygg+VrsqHsQFJ Hw+Gjr50/ntBlD5R4GPBNwAAAA== '); CREATE TABLE manifests ( id primary key, -- strong hash of all the entries in a manifest data not null -- compressed, encoded contents of a manifest ); INSERT INTO manifests VALUES('598dc864af1811332c3fd4ee249cadddba8ebdcd','H4sIAAAAAAAA/yXLyw3CMAwA0HunyAJA4l/sceLUFpVASG32FxK8+6tYgUB7TOiSKWq4m3vP yC4M02uKe+NS7u91G2ud1xZhwY1Yk4QgSSPDWEygsgJxRG/QvZWy4lr7cT4+6xlnHq/YmOcQ UAkMSkofvFciRcQcZjl5UKXR8X9/5QtV3crQowAAAA== '); CREATE TABLE public_keys ( hash not null unique, -- hash of remaining fields separated by ":" id primary key, -- key identifier chosen by user keydata not null -- RSA public params ); INSERT INTO public_keys VALUES('de84b575d5e47254393eba49dce9dc4db98ed42d','njs@pobox.com','MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC54vVjrrqYoTfPTgWm6JpuL+kOERcN2OSc BsWq6cb4Wm3nlymwVqJJywq6cbfygUYwmqyiRLPxRosfLGu228AhEzaM4JbAH1pgg7CwvvVd fHRXNAXEMgO89gBjkkecxLi4U/T67DrLjkRPAilCgWLZNv8YeOG9XAPegWyr7hNA9wIBEQ=='); CREATE TABLE revision_ancestry ( parent not null, -- joins with revisions.id child not null, -- joins with revisions.id unique(parent, child) ); INSERT INTO revision_ancestry VALUES('','be6329dabe85b0bc850f2923166d449cb10d4997'); INSERT INTO revision_ancestry VALUES('be6329dabe85b0bc850f2923166d449cb10d4997','40b16687d983f5bafaf4225dacfbe9b426d17dab'); CREATE TABLE revision_certs ( hash not null unique, -- hash of remaining fields separated by ":" id not null, -- joins with revisions.id name not null, -- opaque string chosen by user value not null, -- opaque blob keypair not null, -- joins with public_keys.id signature not null, -- RSA/SHA1 signature of "[name@id:val]" unique(name, id, value, keypair, signature) ); INSERT INTO revision_certs VALUES('c358d633b790ad7c9ec78b763942807bb8a1a7d3','be6329dabe85b0bc850f2923166d449cb10d4997','branch','dGVzdGJyYW5jaA== ','njs@pobox.com','IosOv++xnwJbUfs0axMC50hsnHlRSuMRd08pW+1wGuafwY5Ne5g4aif1rWoxt9IR/yCYUk1T iV+GDnXANmBRQ8ChoFHFoO50fmY4wcZ8bCtsCUuSi807/0Uqp8MwBN8+tnIvAF5CTl0nXopQ o+IZyVqkc5qP9sIvw0Zmpy2D1aM= '); INSERT INTO revision_certs VALUES('21d750e884f427f5d8aa3f1e4616e45cc0ec0a13','be6329dabe85b0bc850f2923166d449cb10d4997','date','MjAwNS0xMi0yM1QxMDo1MjoyOA== ','njs@pobox.com','lJgZfgMtvvaB+TI9gDOxLyzXKZJgOT+5nhGAfVxHLPMnfENRU5OyDWMmw2hJBaZDXy4YrjZC ZLysmQj63G/d5WKBUJvjNwcx9kyEP17XqLDuLv/ekdzBAPTKBPldajORUpgVYSYcwVcWbqvE 7TteZQhLGZUORXDQAqAcA04EVpo= '); INSERT INTO revision_certs VALUES('8075ed60e0ff43afdba58ad2210b52bf37f16333','be6329dabe85b0bc850f2923166d449cb10d4997','author','bmpzQHBvYm94LmNvbQ== ','njs@pobox.com','PhjaV0i4WrJ6KZk97lNM4FnuK9nLXvoeKC2RYQgikxI2BaBWtRnw9xQ9gQNMT/OYR2WYWRSL 1HsWBuhE6zTOV3EbR3mKFP2gvW20b3hQ+zFldEf4Fc+IpM8nqdM4tGnLzfKgohx+va7yVWOf qU27voyGoHUMu2qXMcRwAJMOJ6o= '); INSERT INTO revision_certs VALUES('b8a3117a005ea82b8543e12e3e9ab0874f8bc9f8','be6329dabe85b0bc850f2923166d449cb10d4997','changelog','Zm9v ','njs@pobox.com','Cuff2kmJ5erYw5GQASoke0oE0kBQRmsQBiE7kYd0NkXgPICquwtsR+2VLhEN2dGNduAhWy6T do8neqe5Y74XJed2WiHhB9AqiTTrBnw7+vcoDVAMkuBkKiJB3EdKwgdJFwjR6to7rf7jBbKh 22HwBfi5YAYVm8bbjJcOn4JTSJA= '); INSERT INTO revision_certs VALUES('069f94a1abee5aee684d89204b71a49aa5c65a10','40b16687d983f5bafaf4225dacfbe9b426d17dab','branch','dGVzdGJyYW5jaA== ','njs@pobox.com','Eik4xN4ZPbbP7NzRBvXcG24jNg8Rr1VKfneS/oajim6jtxIHjDeV5XozE/GS3hpntSoav8K5 sXVkjKQks0lz5uk1XpvavBpdQfNGikjF3URSgAO0gX9cnDlb8q3KGi0Ze7Ck4ES92/YnZsUK JZnKEB26Okgt7E0dDbpQZjm/dPc= '); INSERT INTO revision_certs VALUES('d76f195efcffe68024aa851390efc85efcba2fa7','40b16687d983f5bafaf4225dacfbe9b426d17dab','date','MjAwNS0xMi0yM1QxMDo1Mjo0Ng== ','njs@pobox.com','om3Aj5uwzWwdGw5Wh9ATnfymeXRpI2t/8xVsCCLnyt2koCmnY6NYPhXuiSqnysGgP7Rfc9Qo gP2ehSg5ymlOpG87nY/BVOQ95wqR6xli28EaXz3hCgxXRqiwxTN+CM7Sgo15cPJ6Imk+OJSg 0rBJC/hWAqerQDjTeIaOUy6QYiY= '); INSERT INTO revision_certs VALUES('820e89f071954266b2a77935bd1cf366ea81cd68','40b16687d983f5bafaf4225dacfbe9b426d17dab','author','bmpzQHBvYm94LmNvbQ== ','njs@pobox.com','r09AAP18N7bhquw/OnCrJ2/Sh2c++a5rnzJ9wN4N98wTgrn/2llAbKsoOyWTbKd0HiyJRSOw VBxBK3c7n26FEyYsUk67g+/Xhs5JdwsutqGrXq+/BpFZ/MCUq9DdRJUfIgSrDeXjenjbrykm fzX3XsMuNpDSDfwSLwNfhQm00aE= '); INSERT INTO revision_certs VALUES('f272e44391121d2270c238180f120b091315aec0','40b16687d983f5bafaf4225dacfbe9b426d17dab','changelog','Zm9v ','njs@pobox.com','Qu7CoipxdeqhWQ6G1v81EB+goJsG1fVuCIyGgQqlpmMbzf+rXcNGp2fEzlk9QkoJzbKNVzQh Wg2bChbTu548nXZxOa4oQdEiGopW3NOgySC7wZfwzsJXuf253CFXRtSMCV6LnCzNFgWBOmPD U9jqCLj4V66OpYP0pika378eOow= '); CREATE TABLE revisions ( id primary key, -- SHA1(text of revision) data not null -- compressed, encoded contents of a revision ); INSERT INTO revisions VALUES('be6329dabe85b0bc850f2923166d449cb10d4997','H4sIAAAAAAAA/22Q3U7DMAxG7/sU0e6BOLHz8yxVVbmJrVVaV9RG8Pp0CAGDXfr40/ksX+V9 XPg6q+zN9MzAVItlIFJGVAg2B7SECQJRKF4Sa6Wh69ZLHTd5m/d5vZp++Jx/REeAax11vog5 PS/tiVvb9tNv2o5gnbeXtZ1lu6F/2y/4yq2c7yxGt3W5lRhj2mp6ohhKojIppxht9q4wp2oB AVwKGqIFr16Gb9mD8r9SkSwESEkxoFNMopIp5OAsJYckEsHFCe6lj11EhcNxiXhBRZ2OJ1vE 5L1XzlkLMVrk6IfuAzJHTqSQAQAA '); INSERT INTO revisions VALUES('40b16687d983f5bafaf4225dacfbe9b426d17dab','H4sIAAAAAAAA/0XOTWrEMAxA4X1OYWbfYvlHls8SwiBZFg00k5KY9vo13fQAj++9+s/z4Ndu /R5uzZW0ESY2IIAYQ4umqfeQamNVFaYu2nRblvNTn1f/3u/9fLlVOsZQlaVTFi+NsrdQQwRE TTMW8JpqLdtf9w8yA2dtniFn45QM0FdMPicCzBlb7MSmeYJfPNqHe7wf443HuO7H4uw6jzmd C06wiTGV4uu8Zib1kAACoWHxEC32bXHOjdOtPvqQApXeQkEzpBq1ihTrVjCHJt5QBCb6C4GK 35oeAQAA '); CREATE INDEX revision_ancestry__child ON revision_ancestry (child); CREATE INDEX revision_certs__id ON revision_certs (id); CREATE INDEX revision_certs__name_value ON revision_certs (name, value); COMMIT;