API reference › @evolu/common › Sqlite › sql
function sql(
strings: TemplateStringsArray,
...parameters: SqlTemplateParam[]
): SqliteQuery;
Defined in: packages/common/src/Sqlite.ts:492
Creates a safe SQL query using a tagged template literal.
Parameters are automatically escaped and bound as SQLite values. Use
sql.identifier for column/table names and sql.raw for unescaped SQL.
Example
import { assertEqual, assertTrue, sql } from "@evolu/common";
const id = 42;
const name = "Alice";
const select = sql`
select * from users where id = ${id} and name = ${name};
`;
const tableName = "users";
const createTable = sql`
create table ${sql.identifier(tableName)} (
"id" text primary key,
"name" text not null
);
`;
// Use sql.raw only with trusted SQL fragments.
const orderBy = "created_at desc";
const ordered = sql`select * from users order by ${sql.raw(orderBy)};`;
assertEqual(select, {
sql: "select * from users where id = ? and name = ?;",
parameters: [42, "Alice"],
});
assertTrue(createTable.sql.includes('create table "users"'));
assertEqual(ordered.sql, "select * from users order by created_at desc;");
TIP
Use prettier-plugin-sql-cst for SQL formatting. Like Prettier for
JavaScript, this plugin formats SQL expressions differently depending on
their length.