1 个不稳定版本
0.0.1 | 2021年6月12日 |
---|
#50 在 #null
8KB
168 代码行
Sherloque
什么是Sherloque?
Sherloque是一种语言无关的SQL SDK生成器,灵感来源于GraphqQL Code Generator
为什么选择Sherloque?
以下情况您可能会需要Sherloque:
- 您希望在运行之前验证SQL查询的正确性
- 您需要了解SQL查询的返回类型
- 您不想使用宏/模板
- 您想编写纯SQL
它是如何工作的?
您只需要提供三种类型的文件
- 数据库模式(CREATE TABLE ...)
- SQL操作(SELECT/UPDATE/DELETE)
- Sherloque配置
示例
- 数据库模式
CREATE TABLE person (
id INT NOT NULL,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE pet (
id INT NOT NULL,
owner_id INT NOT NULL,
kind VARCHAR(255) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (owner_id) REFERENCES person(id)
);
- 数据库操作(注意变量前面有前缀
$
)
-- The name of this file: getUserPetsCount.sql
SELECT person.name, count(*)
FROM person INNER JOIN pet
ON person.id = pet.owner_id
WHERE pet.kind = $petKind
GROUP BY person.id;
- Sherloque配置
{
"language": "typescript",
"schemas": "./schema/**/*.sql",
"operations": "./src/**/*.sql",
"output": "./sdk.ts",
"database": "mysql"
}
- 结果(生成的SDK)
export default class<T extends Database> {
constructor(private db: T) {}
getUserPetsCount(args: {petKind: string}): Promise<{
"person.name": string,
"count(*)": number
}[]> {
// generated code
}
}
它与其他库有何不同?
库 | SQL验证 | 支持纯SQL | 语言无关 | 数据库连接 |
---|---|---|---|---|
Rust Diesel | ✓ | ✓ | ||
SQLx | ✓ | ✓ | ✓ | |
Sherloque | ✓ | ✓ | ✓ |
为什么您可能不想使用Sherloque
- 它不支持SQL连接,它仅提供具有正确类型函数的SDK来生成SQL查询。
依赖项
~1.5MB
~28K SLoC