| 5 | * Mimics drizzle-orm's sql tagged template. |
| 6 | */ |
| 7 | export function createMockSql() { |
| 8 | const sqlFn = (strings: TemplateStringsArray, ...values: any[]) => ({ |
| 9 | strings, |
| 10 | values, |
| 11 | toSQL: () => ({ sql: strings.join('?'), params: values }), |
| 12 | }) |
| 13 | |
| 14 | // Add sql.raw method used by some queries |
| 15 | sqlFn.raw = (rawSql: string) => ({ |
| 16 | rawSql, |
| 17 | toSQL: () => ({ sql: rawSql, params: [] }), |
| 18 | }) |
| 19 | |
| 20 | // Add sql.join method used to combine multiple SQL fragments |
| 21 | sqlFn.join = (fragments: any[], separator: any) => ({ |
| 22 | fragments, |
| 23 | separator, |
| 24 | toSQL: () => ({ |
| 25 | sql: fragments.map((f) => f?.toSQL?.()?.sql || String(f)).join(separator?.rawSql || ', '), |
| 26 | params: fragments.flatMap((f) => f?.toSQL?.()?.params || []), |
| 27 | }), |
| 28 | }) |
| 29 | |
| 30 | return sqlFn |
| 31 | } |
| 32 | |
| 33 | /** |
| 34 | * Creates mock SQL operators (eq, and, or, etc.). |