MCPcopy Create free account
hub / github.com/ZenNotes/zennotes / readDatabase

Function readDatabase

apps/desktop/src/main/databases.ts:188–215  ·  view source on GitHub ↗
(root: string, rel: string)

Source from the content-addressed store, hash-verified

186 * stable `id` (one-time migration when opening a plain CSV as a database).
187 */
188export async function readDatabase(root: string, rel: string): Promise<DatabaseDoc> {
189 const csvAbs = databaseDataPath(root, rel)
190 let csvText: string
191 try {
192 csvText = await fs.readFile(csvAbs, 'utf8')
193 } catch (err) {
194 if (isMissing(err)) throw new Error(`Database not found: ${rel}`)
195 throw err
196 }
197
198 const existing = await readSidecar(root, rel)
199 if (existing) {
200 const rows = parseRows(csvText, existing.fields, existing.idFieldId, randomUUID)
201 const pageHasContent = await readPageContentFlags(root, existing.pages)
202 return hydrate(rel, existing, rows, pageHasContent)
203 }
204
205 // Adopt a plain CSV: infer + materialize.
206 const grid = parseCsv(csvText)
207 const headers = grid[0] ?? []
208 const { fields, idFieldId } = inferFields(headers, grid.slice(1, 1 + SCHEMA_SAMPLE_ROWS), randomUUID)
209 const { views, activeViewId } = buildDefaultViews(fields, randomUUID)
210 const sidecar: DatabaseSidecar = { version: 1, idFieldId, fields, views, activeViewId }
211 const rows = parseRows(csvText, fields, idFieldId, randomUUID)
212 await persistSidecar(root, rel, sidecar)
213 await writeFileAtomic(csvAbs, serializeRows(rows, fields)) // canonicalize + persist ids
214 return hydrate(rel, sidecar, rows)
215}
216
217/** Persist rows to the CSV (schema/header come from the sidecar). */
218export async function writeDatabaseRows(

Callers 3

registerIpcFunction · 0.90
databases.test.tsFile · 0.90

Calls 12

databaseDataPathFunction · 0.90
parseRowsFunction · 0.90
parseCsvFunction · 0.90
inferFieldsFunction · 0.90
buildDefaultViewsFunction · 0.90
writeFileAtomicFunction · 0.90
serializeRowsFunction · 0.90
isMissingFunction · 0.85
readSidecarFunction · 0.85
readPageContentFlagsFunction · 0.85
persistSidecarFunction · 0.85
hydrateFunction · 0.70

Tested by

no test coverage detected