API reference@evolu/commonSqlite › 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.