58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
|
/**
|
||
|
* notes.ts
|
||
|
*
|
||
|
* A command line tool to manage a set
|
||
|
* of simple notes.
|
||
|
*
|
||
|
* This is an example, meant to illustrate using
|
||
|
* the API provided by deno-sqlite.
|
||
|
*/
|
||
|
|
||
|
import { DB } from "../mod.ts";
|
||
|
|
||
|
const commands: Record<string, (...args: string[]) => Promise<void> | void> = {
|
||
|
"create": (file: string) => {
|
||
|
const db = new DB(file, { mode: "create" });
|
||
|
db.query(`
|
||
|
CREATE TABLE notes (
|
||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
note TEXT NOT NULL,
|
||
|
created_at TEXT NOT NULL
|
||
|
)
|
||
|
`);
|
||
|
db.close();
|
||
|
console.log("Database created!");
|
||
|
},
|
||
|
"record": (file: string, note: string) => {
|
||
|
const db = new DB(file, { mode: "write" });
|
||
|
db.query("INSERT INTO notes (note, created_at) VALUES (?, ?)", [
|
||
|
note,
|
||
|
new Date(),
|
||
|
]);
|
||
|
db.close();
|
||
|
console.log("Note recorded!");
|
||
|
},
|
||
|
"delete": (file: string, noteId: string) => {
|
||
|
const db = new DB(file, { mode: "write" });
|
||
|
db.query("DELETE FROM notes WHERE id = ?", [noteId]);
|
||
|
db.close();
|
||
|
console.log("Note deleted!");
|
||
|
},
|
||
|
"list": (file: string) => {
|
||
|
const db = new DB(file, { mode: "read" });
|
||
|
const query = db.prepareQuery<[number, string, string]>(
|
||
|
"SELECT id, note, created_at FROM notes ORDER BY created_at DESC",
|
||
|
);
|
||
|
for (const [id, note, createdAt] of query.iter()) {
|
||
|
const date = new Date(createdAt);
|
||
|
console.log(`Note #${id} (recorded ${date.toLocaleString()})\n${note}\n`);
|
||
|
}
|
||
|
query.finalize();
|
||
|
db.close();
|
||
|
},
|
||
|
};
|
||
|
|
||
|
const command = commands[Deno.args[0]] ??
|
||
|
(() => console.error(`Unknown command '${Deno.args[0]}'.`));
|
||
|
await command(...Deno.args.slice(1));
|