Query Methods API
Methods for executing SQL queries and statements.
exec()
Executes one or more SQL statements without parameters or return values.
Signature:
exec(sql: string): void
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
sql |
string |
Yes | SQL statement(s) to execute |
Returns: void
Example:
// Create table
db.exec('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)')
// Multiple statements
db.exec(`
CREATE TABLE posts (id INTEGER PRIMARY KEY, title TEXT);
CREATE TABLE comments (id INTEGER PRIMARY KEY, post_id INTEGER);
CREATE INDEX idx_comments_post ON comments(post_id);
`)
Throws:
SqlSyntaxError— If SQL is invalidSqlNotFoundError— If referenced table/column doesn't existSqlConstraintError— If constraint is violated
run()
Executes a single SQL statement with parameters, returning change information.
Signature:
run(sql: string | SqlTemplate, params?: ParamArray | ParamObject): RunResult
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
sql |
string | SqlTemplate |
Yes | SQL statement to execute |
params |
ParamArray | ParamObject |
No | Parameters to bind |
Returns: RunResult — Object with changes and lastInsertRowId
Example:
// Positional parameters
const result = db.run(
'INSERT INTO users (name, email) VALUES (?, ?)',
['Alice', 'alice@example.com']
)
console.log(result.lastInsertRowId) // 1
console.log(result.changes) // 1
// Named parameters
db.run(
'UPDATE users SET email = :email WHERE id = :id',
{ email: 'new@example.com', id: 1 }
)
// Template literal
const name = 'Bob'
db.run(db.sql`INSERT INTO users (name) VALUES (${name})`)
Throws:
SqlSyntaxError— If SQL is invalidSqlError— If parameter count doesn't match placeholdersSqlConstraintError— If constraint is violated
get()
Executes a query and returns the first row.
Signature:
get<T extends Record<string, unknown> = Record<string, unknown>>(
sql: string | SqlTemplate,
params?: ParamArray | ParamObject
): T | undefined
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
sql |
string | SqlTemplate |
Yes | SQL query |
params |
ParamArray | ParamObject |
No | Parameters to bind |
Returns: T | undefined — First row as typed object, or undefined if no match
Example:
interface User {
id: number
name: string
email: string
}
const user = db.get<User>('SELECT * FROM users WHERE id = ?', [1])
if (user) {
console.log(user.name) // TypeScript knows this is string
}
Throws:
SqlSyntaxError— If SQL is invalidSqlError— If parameter count doesn't match placeholders
all()
Executes a query and returns all matching rows.
Signature:
all<T extends Record<string, unknown> = Record<string, unknown>>(
sql: string | SqlTemplate,
params?: ParamArray | ParamObject
): T[]
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
sql |
string | SqlTemplate |
Yes | SQL query |
params |
ParamArray | ParamObject |
No | Parameters to bind |
Returns: T[] — Array of row objects (empty array if no matches)
Example:
interface User {
id: number
name: string
}
const users = db.all<User>('SELECT * FROM users WHERE name LIKE ?', ['A%'])
console.log(users.length)
users.forEach(u => console.log(u.name))
Throws:
SqlSyntaxError— If SQL is invalidSqlError— If parameter count doesn't match placeholders
sql
Tagged template literal for safe query building.
Signature:
sql(strings: TemplateStringsArray, ...values: unknown[]): SqlTemplate
Returns: SqlTemplate — Object with sql string and params array
Example:
const name = 'Alice'
const minAge = 18
// Values become ? placeholders automatically
const template = db.sql`
SELECT * FROM users
WHERE name = ${name}
AND age >= ${minAge}
`
// Use with any query method
const users = db.all(template)
const user = db.get(template)
db.run(db.sql`UPDATE users SET active = ${true} WHERE id = ${1}`)
Types
RunResult
interface RunResult {
changes: number
lastInsertRowId: number
}
| Property | Type | Description |
|---|---|---|
changes |
number |
Number of rows affected |
lastInsertRowId |
number |
ID of last inserted row (for INSERT operations) |
ParamArray
type ParamArray = unknown[]
Positional parameters bound to ? placeholders in order.
ParamObject
type ParamObject = Record<string, unknown>
Named parameters bound to :name, $name, or @name placeholders.
SqlTemplate
interface SqlTemplate {
sql: string
params: unknown[]
}
Result of the db.sql tagged template literal.