跳转到内容

驱动适配器

createDriverAdapter 为不同数据库方言提供统一抽象,包括占位符、标识符引用、分页、UPSERT 等差异处理。支持 postgresqlmysqlsqlitemssql 四种驱动。

import { createDriverAdapter } from "@ventostack/database";
const pg = createDriverAdapter("postgresql");
pg.placeholder(1); // "$1"
pg.quote("users"); // "\"users\""
pg.limitOffset(10, 20); // "LIMIT 10 OFFSET 20"
pg.returning(["id", "name"]); // "RETURNING id, name"
pg.now(); // "NOW()"
pg.boolean(true); // "TRUE"
const mysql = createDriverAdapter("mysql");
mysql.placeholder(1); // "?"
mysql.quote("users"); // "`users`"
mysql.returning(["id"]); // "" (MySQL 不支持 RETURNING)

各驱动会自动生成对应的 UPSERT 语法:

const pg = createDriverAdapter("postgresql");
pg.upsert("users", ["email", "name", "age"], ["email"]);
// "INSERT INTO users (...) VALUES ($1, $2, $3) ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name, age = EXCLUDED.age"
const mysql = createDriverAdapter("mysql");
mysql.upsert("users", ["email", "name", "age"], ["email"]);
// "INSERT INTO users (...) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE ..."
参数类型说明
driver"postgresql" | "mysql" | "sqlite" | "mssql"数据库驱动类型
方法返回值说明
placeholder(index)string生成参数占位符(PG: $1, MySQL/SQLite: ?, MSSQL: @p1
quote(identifier)string引用标识符(表名、列名等)
limitOffset(limit, offset)string生成分页子句
returning(fields)string生成 RETURNING 子句(MySQL 返回空)
now()string当前时间戳函数
upsert(table, fields, conflictFields)string生成 UPSERT 语句
boolean(value)string布尔值字面量