Query language

August 23, 2026 ยท View on GitHub

Infix builders on adapters. Call .list(), .single(), or .execute() in a transaction.

Select

userAdapter.select()
userAdapter.select(User.id, User.name)
userAdapter.select().distinct()

userAdapter.select() where (User.name eq "Ada")
userAdapter.select() where (User.age greaterThan 18)
userAdapter.select() where (User.name like "A%")
userAdapter.select() where (User.id `in` listOf(1, 2, 3))
userAdapter.select() where (
    (User.name eq "Ada") or (User.name eq "Grace")
)

userAdapter.select() orderBy User.name.asc()
userAdapter.select() limit 10 offset 20
userAdapter.select() groupBy User.team

Join

(postAdapter.select()
    innerJoin userAdapter
    on (Post.author_id eq User.id))
    .list()

Also leftOuterJoin, crossJoin, naturalJoin, using.

Update / delete / insert

(userAdapter.update()
    set (User.name eq "Grace")
    where (User.name eq "Ada")).execute()

(userAdapter.delete() where (User.name eq "Ada")).execute()

userAdapter.insert(User.name.eq("Lin")).execute()

Conflict:

userAdapter.insert() or ConflictAction.REPLACE

Operators

KotlinSQL
eq / notEq= / !=
greaterThan / greaterThanOrEq> / >=
lessThan / lessThanOrEq< / <=
like / notLike / glob / matchLIKE / GLOB / MATCH
`in` / notInIN
betweenBETWEEN
and / orAND / OR
concatenate||
`as`AS

Print SQL with .query on the builder (no execution).