+39
src/pds.js
+39
src/pds.js
···
142
142
constructor(state, env) {
143
143
this.state = state
144
144
this.sql = state.storage.sql
145
+
this.env = env
146
+
147
+
// Initialize schema
148
+
this.sql.exec(`
149
+
CREATE TABLE IF NOT EXISTS blocks (
150
+
cid TEXT PRIMARY KEY,
151
+
data BLOB NOT NULL
152
+
);
153
+
154
+
CREATE TABLE IF NOT EXISTS records (
155
+
uri TEXT PRIMARY KEY,
156
+
cid TEXT NOT NULL,
157
+
collection TEXT NOT NULL,
158
+
rkey TEXT NOT NULL,
159
+
value BLOB NOT NULL
160
+
);
161
+
162
+
CREATE TABLE IF NOT EXISTS commits (
163
+
seq INTEGER PRIMARY KEY AUTOINCREMENT,
164
+
cid TEXT NOT NULL,
165
+
rev TEXT NOT NULL,
166
+
prev TEXT
167
+
);
168
+
169
+
CREATE TABLE IF NOT EXISTS seq_events (
170
+
seq INTEGER PRIMARY KEY AUTOINCREMENT,
171
+
did TEXT NOT NULL,
172
+
commit_cid TEXT NOT NULL,
173
+
evt BLOB NOT NULL
174
+
);
175
+
176
+
CREATE INDEX IF NOT EXISTS idx_records_collection ON records(collection, rkey);
177
+
`)
145
178
}
146
179
147
180
async fetch(request) {
···
160
193
if (url.pathname === '/test/tid') {
161
194
const tids = [createTid(), createTid(), createTid()]
162
195
return Response.json({ tids })
196
+
}
197
+
if (url.pathname === '/test/schema') {
198
+
const tables = this.sql.exec(`
199
+
SELECT name FROM sqlite_master WHERE type='table' ORDER BY name
200
+
`).toArray()
201
+
return Response.json({ tables: tables.map(t => t.name) })
163
202
}
164
203
return new Response('pds running', { status: 200 })
165
204
}