#sql #sql-database #generator #sdk #language #null #table

app sherloque

一种语言无关的SQL SDK生成器

1 个不稳定版本

0.0.1 2021年6月12日

#50#null

MIT/Apache

8KB
168 代码行

Sherloque

什么是Sherloque?

Sherloque是一种语言无关的SQL SDK生成器,灵感来源于GraphqQL Code Generator

为什么选择Sherloque?

以下情况您可能会需要Sherloque:

  1. 您希望在运行之前验证SQL查询的正确性
  2. 您需要了解SQL查询的返回类型
  3. 您不想使用宏/模板
  4. 您想编写纯SQL

它是如何工作的?

您只需要提供三种类型的文件

  1. 数据库模式(CREATE TABLE ...)
  2. SQL操作(SELECT/UPDATE/DELETE)
  3. Sherloque配置

示例

  1. 数据库模式
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)
);
  1. 数据库操作(注意变量前面有前缀 $
-- 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;
  1. Sherloque配置
{
  "language": "typescript",
  "schemas": "./schema/**/*.sql",
  "operations": "./src/**/*.sql",
  "output": "./sdk.ts",
  "database": "mysql"
}
  1. 结果(生成的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

  1. 它不支持SQL连接,它仅提供具有正确类型函数的SDK来生成SQL查询。

依赖项

~1.5MB
~28K SLoC