tsql
.md

Raw SQL

tsql has template APIs for edge cases:

Prefer fluent query builders for common select statements:

const rows = await db
	.from("users")
	.where(({ users }) => users.email.like("%@example.com", db.dialect))
	.select(({ users }) => ({ id: users.id, email: users.email }))
	.execute();

db.expr

const rows = await db
	.from("users")
	.where(({ users }) => db.expr<boolean>`lower(${users.email}) = lower(${"Alice@example.com"})`)
	.select(({ users }) => ({ id: users.id }))
	.execute();

This is useful for dialect functions, computed predicates, and reusable SQL snippets.

Both template APIs parameterize interpolated values.

sqlExpr

For lower-level helpers or library code:

import { sqlExpr } from "@bms/tsql";

const trueExpr = sqlExpr<boolean>("1 = 1");

sqlExpr is a direct constructor around SQL + params.