Compile a SQL query and return a Statement object.
This does not cache the compiled query and does not execute the query.
Under the hood, this calls sqlite3_prepare_v3
.
Symbol
Compile a SQL query and return a Statement object.
This does not cache the compiled query and does not execute the query.
Under the hood, this calls sqlite3_prepare_v3
.
The SQL query to compile
Optional bindings for the query
A Statement instance
// compile the query
const stmt = db.query("SELECT * FROM foo WHERE bar = ?");
// run the query
stmt.all("baz");
A prepared statement.
This is returned by Database.prepare and Database.query.
const stmt = db.prepare("SELECT * FROM foo WHERE bar = ?");
stmt.all("baz");
// => [{bar: "baz"}]
The names of the columns returned by the prepared statement.
const stmt = db.prepare("SELECT bar FROM foo WHERE bar = ?");
console.log(stmt.columnNames);
// => ["bar"]
Native object representing the underlying sqlite3_stmt
This is left untyped because the ABI of the native bindings may change at any time.
The number of parameters expected in the prepared statement.
const stmt = db.prepare("SELECT * FROM foo WHERE bar = ?");
console.log(stmt.paramsCount);
// => 1
Calls finalize if it wasn't already called.
Execute the prepared statement and return all results as objects.
optional values to bind to the statement. If omitted, the statement is run with the last bound values or no parameters if there are none.
const stmt = db.prepare("SELECT * FROM foo WHERE bar = ?");
stmt.all("baz");
// => [{bar: "baz"}]
stmt.all();
// => []
stmt.all("foo");
// => [{bar: "foo"}]
Make get and all return an instance of the provided Class
instead of the default Object
.
A class to use
The same statement instance, modified to return an instance of Class
This lets you attach methods, getters, and setters to the returned objects.
For performance reasons, constructors for classes are not called, which means initializers will not be called and private fields will not be accessible.
class User {
rawBirthdate: string;
get birthdate() {
return new Date(this.rawBirthdate);
}
}
const db = new Database(":memory:");
db.exec("CREATE TABLE users (id INTEGER PRIMARY KEY, rawBirthdate TEXT)");
db.run("INSERT INTO users (rawBirthdate) VALUES ('1995-12-19')");
const query = db.query("SELECT * FROM users");
query.as(User);
const user = query.get();
console.log(user.birthdate);
// => Date(1995, 12, 19)
Finalize the prepared statement, freeing the resources used by the statement and preventing it from being executed again.
This is called automatically when the prepared statement is garbage collected.
It is safe to call this multiple times. Calling this on a finalized statement has no effect.
Internally, this calls sqlite3_finalize
.
Execute the prepared statement and return the first result.
If no result is returned, this returns null
.
optional values to bind to the statement. If omitted, the statement is run with the last bound values or no parameters if there are none.
const stmt = db.prepare("SELECT * FROM foo WHERE bar = ?");
stmt.get("baz");
// => {bar: "baz"}
stmt.get();
// => null
stmt.get("foo");
// => {bar: "foo"}
The following types can be used when binding parameters:
JavaScript type | SQLite type |
---|---|
string | TEXT |
number | INTEGER or DECIMAL |
boolean | INTEGER (1 or 0) |
Uint8Array | BLOB |
Buffer | BLOB |
bigint | INTEGER |
null | NULL |
Execute the prepared statement and return an
optional values to bind to the statement. If omitted, the statement is run with the last bound values or no parameters if there are none.
Execute the prepared statement. This returns undefined
.
optional values to bind to the statement. If omitted, the statement is run with the last bound values or no parameters if there are none.
const stmt = db.prepare("UPDATE foo SET bar = ?");
stmt.run("baz");
// => undefined
stmt.run();
// => undefined
stmt.run("foo");
// => undefined
The following types can be used when binding parameters:
JavaScript type | SQLite type |
---|---|
string | TEXT |
number | INTEGER or DECIMAL |
boolean | INTEGER (1 or 0) |
Uint8Array | BLOB |
Buffer | BLOB |
bigint | INTEGER |
null | NULL |
Return the expanded SQL string for the prepared statement.
Internally, this calls sqlite3_expanded_sql()
on the underlying sqlite3_stmt
.
const stmt = db.prepare("SELECT * FROM foo WHERE bar = ?", "baz");
console.log(stmt.toString());
// => "SELECT * FROM foo WHERE bar = 'baz'"
console.log(stmt);
// => "SELECT * FROM foo WHERE bar = 'baz'"
Execute the prepared statement and return the results as an array of arrays.
In Bun v0.6.7 and earlier, this method returned null
if there were no results instead of []
. This was changed in v0.6.8 to align more with what people expect.
optional values to bind to the statement. If omitted, the statement is run with the last bound values or no parameters if there are none.
const stmt = db.prepare("SELECT * FROM foo WHERE bar = ?");
stmt.values("baz");
// => [['baz']]
stmt.values();
// => [['baz']]
stmt.values("foo");
// => [['foo']]
stmt.values("not-found");
// => []
The following types can be used when binding parameters:
JavaScript type | SQLite type |
---|---|
string | TEXT |
number | INTEGER or DECIMAL |
boolean | INTEGER (1 or 0) |
Uint8Array | BLOB |
Buffer | BLOB |
bigint | INTEGER |
null | NULL |