Advanced
1. Computed Columns (SQL Expressions)
// src/config/users.ts
import { defineTable } from '@tablecraft/engine';
import { users } from '../db/schema';
import { sql } from 'drizzle-orm';
export const userConfig = defineTable(users)
// Create a 'fullName' column from first and last names
.computed('fullName', sql`CONCAT(${users.firstName}, ' ', ${users.lastName})`)
// Calculate age from birthdate
.computed('age', sql`EXTRACT(YEAR FROM AGE(${users.birthDate}))`)
// Use these computed columns just like real ones!
.sortable('fullName', 'age')
.filter('age')
.toConfig();2. Custom Search Logic
3. Data Transformation
4. Static Filters (Base Conditions)
5. Type-Safe Date Filters
6. Subquery Columns
Form 1 — Drizzle operators (recommended — use your schema exactly as you would anywhere else)
Form 2 — Structured SubqueryCondition[] (typed, injection-safe)
SubqueryCondition[] (typed, injection-safe)Form 3 — Raw SQL string (@deprecated)
Subquery types
Type
Return value
Sortable
Dialect
Sorting rules
Dialect requirement for first
firstSortable flag on .computed()
.computed()Next Steps
Last updated
Was this helpful?
