| 16 | import { buildWhereSQLQuery, logQuery, pgDialect } from "./query.ts" |
| 17 | |
| 18 | const sqlErrorMessage = (e: unknown) => (e as any)?.message ? String((e as any).message) : String(e) |
| 19 | const sqlIsTransient = (e: unknown) => |
| 20 | /timeout|ETIMEDOUT|ECONNRESET|ECONNREFUSED|connection|deadlock|too many connections/i.test(sqlErrorMessage(e)) |
| 21 | // Map a SqlError into a typed, serializable DatabaseError (instead of `.orDie`, |
| 22 | // which would turn it into an opaque, non-serializable defect). |
| 23 | const toDatabaseError = (e: unknown) => |
| 24 | new DatabaseError({ message: `SQL request failed: ${sqlErrorMessage(e)}`, transient: sqlIsTransient(e), cause: e }) |
| 25 | // withTransaction may re-raise setInternal's typed errors or add SqlError on begin/commit. |
| 26 | // Preserve DatabaseError / OCC by `_tag` (not instanceof — dual package instances break it); |
| 27 | // map residual SQL failures to DatabaseError. |
| 28 | const preserveStoreError = (e: unknown): DatabaseError | OptimisticConcurrencyException => { |