SQL query builder

July 21, 2026 · View on GitHub

← Feature-support matrix index

Legend:

  • Works — proven by a Prisma Next integration test (one that executes the feature against a database — Postgres via PGlite, SQLite via its real driver, or MongoDB via mongodb-memory-server — and asserts the observable runtime result). Unit-tier tests (SQL/AST/plan/type/snapshot assertions, or any test that never hits a database) do not qualify. Per-database rigor applies: a Postgres integration test cannot justify a SQLite or MongoDB , and vice versa.
  • 🟡 Untested — reachable through the Prisma Next public surface, but no proving Prisma Next integration test exists yet (evidence left blank). This includes features whose only backing is a unit-tier test.
  • 🧪 Experimental — shipped in Prisma Next but outside the stability promise (polymorphism / multi-table inheritance).
  • Not in 8.0 — deliberately absent from Prisma Next.
  • n/a — feature does not apply to that database.
FeaturePostgresSQLiteMongoDBPrisma Next evidence
select(...) (columns / aliased expr / callback record)test/integration/test/sql-builder/select.test.ts; test/e2e/framework/test/sqlite/sql-builder.test.ts
inserttest/integration/test/sql-builder/mutation.test.ts (INSERT returns inserted row via returning); test/e2e/framework/test/sqlite/sql-builder.test.ts (insert with RETURNING)
updatetest/integration/test/sql-builder/mutation.test.ts (UPDATE with WHERE returns updated row); test/e2e/framework/test/sqlite/sql-builder.test.ts (update with WHERE and RETURNING)
deletetest/integration/test/sql-builder/mutation.test.ts (DELETE with WHERE returns deleted row); test/e2e/framework/test/sqlite/sql-builder.test.ts (delete with WHERE and RETURNING)
innerJoin🟡test/integration/test/sql-builder/join.test.ts (INNER JOIN); test/e2e/framework/test/runtime.joins.test.ts
outerLeftJoin🟡test/e2e/framework/test/runtime.joins.test.ts (LEFT JOIN returns all users including those without posts)
outerRightJoin🟡test/e2e/framework/test/runtime.joins.test.ts (RIGHT JOIN returns all posts including those without users)
outerFullJoin🟡test/e2e/framework/test/runtime.joins.test.ts (FULL JOIN returns all users and posts)
lateralJoin (capability-gated)🟡
outerLateralJoin (capability-gated)🟡
where(...) predicatetest/integration/test/sql-builder/where.test.ts; test/e2e/framework/test/sqlite/sql-builder.test.ts (WHERE filter)
orderBy(...) direction (asc/desc)test/integration/test/sql-builder/order-by.test.ts; test/e2e/framework/test/sqlite/sql-builder.test.ts (ORDER BY)
orderBy(...) nulls placement (nulls: first/last)🟡🟡
groupBy🟡test/integration/test/sql-builder/group-by.test.ts (GROUP BY with COUNT)
having🟡test/integration/test/sql-builder/group-by.test.ts (HAVING filters groups)
limittest/integration/test/sql-builder/pagination.test.ts (LIMIT restricts row count); test/e2e/framework/test/sqlite/sql-builder.test.ts (LIMIT and OFFSET)
offsettest/integration/test/sql-builder/pagination.test.ts (OFFSET skips rows); test/e2e/framework/test/sqlite/sql-builder.test.ts (LIMIT and OFFSET)
distinct()🟡test/integration/test/sql-builder/distinct.test.ts (DISTINCT removes duplicate rows)
distinctOntest/integration/test/sql-builder/distinct.test.ts (DISTINCT ON selects first row per group)
returning(...) (capability-gated)test/integration/test/sql-builder/mutation.test.ts (INSERT returns inserted row via returning); test/e2e/framework/test/sqlite/sql-builder.test.ts (insert with RETURNING)
annotate([...]) operation metadata🟡🟡
Subquery composition🟡test/integration/test/sql-builder/subquery.test.ts (subquery as join source)
EXISTS composition🟡test/integration/test/sql-builder/subquery.test.ts (EXISTS filters to rows with matching subquery)
IN composition🟡test/integration/test/sql-builder/subquery.test.ts (IN with subquery and parameters in both parent and subquery)
eq functiontest/integration/test/sql-builder/where.test.ts (eq filters to matching row); test/e2e/framework/test/sqlite/sql-builder.test.ts (WHERE filter)
ne function🟡test/integration/test/sql-builder/subquery.test.ts (IN with subquery and parameters in both parent and subqueryfns.ne(f.name, 'Bob') filters out the non-matching row)
gt function🟡test/integration/test/sql-builder/where.test.ts (gt filters rows)
gte function🟡🟡
lt function🟡test/integration/test/sql-builder/where.test.ts (lt filters rows)
lte function🟡🟡
and function🟡test/integration/test/sql-builder/subquery.test.ts (IN with subqueryfns.and)
or function🟡test/integration/test/sql-builder/where.test.ts (or within a single where)
exists function🟡test/integration/test/sql-builder/subquery.test.ts (EXISTS filters to rows with matching subquery)
notExists function🟡🟡
in function🟡test/integration/test/sql-builder/subquery.test.ts (IN with subquery)
notIn function🟡🟡
Aggregate count🟡test/integration/test/sql-builder/group-by.test.ts (GROUP BY with COUNT)
Aggregate sum🟡🟡
Aggregate avg🟡🟡
Aggregate min🟡🟡
Aggregate max🟡🟡
Extension operator iliketest/integration/test/sql-builder/extension-functions.test.ts (ilike filters case-insensitively in WHERE)
Extension operator cosineDistancetest/integration/test/sql-builder/extension-functions.test.ts (cosineDistance computes distance for identical vectors)
Extension operator cosineSimilaritytest/integration/test/sql-builder/extension-functions.test.ts (cosineSimilarity computes similarity for identical vectors)
Capability gating (lateralJoin unavailable on SQLite)test/e2e/framework/test/sqlite/sql-builder.test.ts (lateralJoin is not available)
Field references (column-vs-column comparison)🟡test/integration/test/sql-orm-client/field-reference.test.ts