better-sqlite
litdb driver for better-sqlite3
Install
node install @litdb/better-sqlite
Usage
db.ts
import { connect } from "@litdb/better-sqlite"
export const connection = connect("app.db")
export const { $, sync:db, async, native } = connection
When needed use native
to access underlying better-sqlite
driver
app.ts
import { $, db } from "./db"
import { Contact } from "./models"
db.dropTable(Contact)
db.createTable(Contact)
db.insertAll([
new Contact({ name:"John Doe", email:"john@email.org" }),
new Contact({ name:"Jane Doe", email:"jane@email.org" }),
])
const janeEmail = 'jane@email.org'
const jane = db.one<Contact>($.from(Contact).where(c => $`${c.email} = ${janeEmail}`))!
const {lastInsertRowid:bobId} = db.insert(new Contact({ name:"Bob", email:"bob@mail.org" }))
const {lastInsertRowid} = db.exec`INSERT INTO Contact(name,email) VALUES('Jo','jo@doe.io')`
const name = 'Alice', email = 'alice@email.org'
db.exec`INSERT INTO Contact(name,email) VALUES (${name}, ${email})`
const hasId = <Table extends { id:number }>(id:number) =>
(x:Table) => $.sql($`${x.id} = $id`, { id })
const contacts = db.all($.from(Contact).into(Contact))
const bob = db.one($.from(Contact).where(hasId(bobId)).into(Contact))
const contactsCount = db.value($.from(Contact).select`COUNT(*)`)
const emails = db.column($.from(Contact).select(c => $`${c.email}`))
const contactsArray = db.arrays($.from(Contact))
const bobArray = db.array($.from(Contact).where(hasId(bobId)))
jane.email = 'jane@doe.org'
db.update(jane)
db.update(jane, { onlyProps:['email'] })
db.exec($.update(Contact).set({ email:jane.email }).where(hasId(jane.id)))
db.delete(jane)
db.exec($.deleteFrom(Contact).where(hasId(jane.id)))
Website: https://litdb.dev