用途:为 Prisma ORM 7 的 SQL 驱动适配器开发提供参考,适用于实现或修改适配器、添加数据库驱动,以及调试 P2039、事务泄漏、影子数据库失败或适配器专属查询行为。使用时须搭配目标 Prisma 版本安装的确切 @prisma/driver-adapter-utils 版本,因为驱动适配器是协议边界,类型兼容的代码仍可能损坏值、泄漏连接或破坏事务。
主要能力:涉及实现 SqlDriverAdapterFactory、SqlMigrationAwareDriverAdapterFactory、SqlDriverAdapter 或 Transaction;添加嵌套事务/savepoint 支持;映射驱动值、列元数据、绑定参数或数据库错误。约定包括:每个事务使用一条专用连接;commit/rollback 仅作生命周期清理钩子,不重复发 COMMIT/ROLLBACK;savepoint 挂在 Transaction 上而非适配器全局;保留原始数据库错误码与消息以支持 P2039。查询实现需同时按值与 ArgType 映射参数,使用数组元组行模式保证列顺序。结果需返回长度与顺序一致的 columnNames、columnTypes、rows,并谨慎映射列类型:有符号整数宽度映射 Int32/Int64 且不截断 64 位值,decimal/numeric 映射 Numeric,binary 映射 Uint8Array/Bytes,date/time/timestamp 映射 Date/Time/DateTime,不支持的本地类型抛 UnsupportedNativeDataType。executeScript 应优先使用驱动原生多语句能力或真正的 SQL 解析器,不能简单按分号拆分。startTransaction 需获取一条专用连接、按需应用隔离级别并绑定同一连接;隔离级别支持 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SNAPSHOT、SERIALIZABLE,但须验证具体数据库是否支持,不支持时以 InvalidIsolationLevel 失败。
使用方式与限制:需在适配器中实现工厂 connect()、适配器 dispose() 与可选 getConnectionInfo(),并处理所有权:仅关闭自有连接池,调用方拥有的池只解除监听。影子数据库须隔离、唯一命名并在失败清理与 dispose 时删除,绝不能指向主库。错误映射需包装已知驱动失败为 DriverAdapterError,保留 originalCode 与 originalMessage,未知的非驱动异常应原样抛出。提供的示例代码仅为参考结构,具体行为须以实际驱动能力为准;资料未提供收费、价格或平台信息。