import "server-only"; import { sql, type SQL } from "drizzle-orm"; /** * Build a Drizzle WHERE fragment that fuzzy-matches `column` against `query` * using pg_trgm's similarity operator. Returns `true` (no filter) when query is * empty so callers can compose unconditionally. * * Caller must ensure a `gin_trgm_ops` index exists on the column. */ export function trigramMatch(column: SQL, query: string | null | undefined): SQL { const q = (query ?? "").trim(); if (!q) return sql`true`; return sql`${column} % ${q}`; } /** Order-by fragment that ranks rows by similarity descending. */ export function trigramRank(column: SQL, query: string | null | undefined): SQL { const q = (query ?? "").trim(); if (!q) return sql`1`; return sql`similarity(${column}, ${q}) DESC`; }