A from-scratch atproto PDS implementation in Python (mirrors https://github.com/DavidBuchanan314/millipds)

make db tables STRICT, some WITHOUT ROWID, others AUTOINCREMENT

+13 -13
+2 -2
migration_scripts/v2.py
··· 19 doc TEXT, 20 created_at INTEGER NOT NULL, 21 expires_at INTEGER NOT NULL 22 - ) 23 """ 24 ) 25 ··· 30 did TEXT, 31 created_at INTEGER NOT NULL, 32 expires_at INTEGER NOT NULL 33 - ) 34 """ 35 ) 36
··· 19 doc TEXT, 20 created_at INTEGER NOT NULL, 21 expires_at INTEGER NOT NULL 22 + ) STRICT, WITHOUT ROWID 23 """ 24 ) 25 ··· 30 did TEXT, 31 created_at INTEGER NOT NULL, 32 expires_at INTEGER NOT NULL 33 + ) STRICT, WITHOUT ROWID 34 """ 35 ) 36
+11 -11
src/millipds/database.py
··· 107 bsky_appview_pfx TEXT, 108 bsky_appview_did TEXT, 109 jwt_access_secret TEXT NOT NULL 110 - ) 111 """ 112 ) 113 ··· 125 self.con.execute( 126 """ 127 CREATE TABLE user( 128 - id INTEGER PRIMARY KEY NOT NULL, 129 did TEXT NOT NULL, 130 handle TEXT NOT NULL, 131 prefs BLOB NOT NULL, ··· 134 head BLOB NOT NULL, 135 rev TEXT NOT NULL, 136 commit_bytes BLOB NOT NULL 137 - ) 138 """ 139 ) 140 ··· 147 seq INTEGER PRIMARY KEY AUTOINCREMENT, 148 timestamp INTEGER NOT NULL, 149 msg BLOB NOT NULL 150 - ) 151 """ 152 ) 153 ··· 161 value BLOB NOT NULL, 162 FOREIGN KEY (repo) REFERENCES user(id), 163 PRIMARY KEY (repo, cid) 164 - ) 165 """ 166 ) 167 self.con.execute("CREATE INDEX mst_since ON mst(since)") ··· 177 value BLOB NOT NULL, 178 FOREIGN KEY (repo) REFERENCES user(id), 179 PRIMARY KEY (repo, nsid, rkey) 180 - ) 181 """ 182 ) 183 self.con.execute("CREATE INDEX record_since ON record(since)") ··· 191 self.con.execute( 192 """ 193 CREATE TABLE blob( 194 - id INTEGER PRIMARY KEY NOT NULL, 195 repo INTEGER NOT NULL, 196 cid BLOB, 197 refcount INTEGER NOT NULL, 198 since TEXT, 199 FOREIGN KEY (repo) REFERENCES user(id) 200 - ) 201 """ 202 ) 203 self.con.execute( ··· 214 data BLOB NOT NULL, 215 PRIMARY KEY (blob, idx), 216 FOREIGN KEY (blob) REFERENCES blob(id) 217 - ) 218 """ 219 ) 220 ··· 227 doc TEXT, 228 created_at INTEGER NOT NULL, 229 expires_at INTEGER NOT NULL 230 - ) 231 """ 232 ) 233 ··· 239 did TEXT, 240 created_at INTEGER NOT NULL, 241 expires_at INTEGER NOT NULL 242 - ) 243 """ 244 ) 245
··· 107 bsky_appview_pfx TEXT, 108 bsky_appview_did TEXT, 109 jwt_access_secret TEXT NOT NULL 110 + ) STRICT 111 """ 112 ) 113 ··· 125 self.con.execute( 126 """ 127 CREATE TABLE user( 128 + id INTEGER PRIMARY KEY AUTOINCREMENT, 129 did TEXT NOT NULL, 130 handle TEXT NOT NULL, 131 prefs BLOB NOT NULL, ··· 134 head BLOB NOT NULL, 135 rev TEXT NOT NULL, 136 commit_bytes BLOB NOT NULL 137 + ) STRICT 138 """ 139 ) 140 ··· 147 seq INTEGER PRIMARY KEY AUTOINCREMENT, 148 timestamp INTEGER NOT NULL, 149 msg BLOB NOT NULL 150 + ) STRICT 151 """ 152 ) 153 ··· 161 value BLOB NOT NULL, 162 FOREIGN KEY (repo) REFERENCES user(id), 163 PRIMARY KEY (repo, cid) 164 + ) STRICT, WITHOUT ROWID 165 """ 166 ) 167 self.con.execute("CREATE INDEX mst_since ON mst(since)") ··· 177 value BLOB NOT NULL, 178 FOREIGN KEY (repo) REFERENCES user(id), 179 PRIMARY KEY (repo, nsid, rkey) 180 + ) STRICT, WITHOUT ROWID 181 """ 182 ) 183 self.con.execute("CREATE INDEX record_since ON record(since)") ··· 191 self.con.execute( 192 """ 193 CREATE TABLE blob( 194 + id INTEGER PRIMARY KEY AUTOINCREMENT, 195 repo INTEGER NOT NULL, 196 cid BLOB, 197 refcount INTEGER NOT NULL, 198 since TEXT, 199 FOREIGN KEY (repo) REFERENCES user(id) 200 + ) STRICT 201 """ 202 ) 203 self.con.execute( ··· 214 data BLOB NOT NULL, 215 PRIMARY KEY (blob, idx), 216 FOREIGN KEY (blob) REFERENCES blob(id) 217 + ) STRICT, WITHOUT ROWID 218 """ 219 ) 220 ··· 227 doc TEXT, 228 created_at INTEGER NOT NULL, 229 expires_at INTEGER NOT NULL 230 + ) STRICT, WITHOUT ROWID 231 """ 232 ) 233 ··· 239 did TEXT, 240 created_at INTEGER NOT NULL, 241 expires_at INTEGER NOT NULL 242 + ) STRICT, WITHOUT ROWID 243 """ 244 ) 245