Sherloque is a language agnostic SQL SDK generator. Inspired by GraphqQL Code Generator
You will want Sherloque if:
- You want to know if your SQL queries are correct without actually running it
- You want the return type of your SQL queries
- You don't want to use macros/template
- You want to write pure SQL
You just need to provide 3 kind of files:
- Database schema (CREATE TABLE ...)
- SQL operations (SELECT/UPDATE/DELETE)
- Sherloque configuration
- Database Schema
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)
);
- Database Operation
(Note that variables are prefixed with
$
)
-- 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 config
{
"language": "typescript",
"schemas": "./schema/**/*.sql",
"operations": "./src/**/*.sql",
"output": "./sdk.ts",
"database": "mysql"
}
- Result (generated SDK)
export default class<T extends Database> {
constructor(private db: T) {}
getUserPetsCount(args: {petKind: string}): Promise<{
"person.name": string,
"count(*)": number
}[]> {
// generated code
}
}
Library | SQL Verification | Pure SQL Support | Language Agnostic | Database Connection |
---|---|---|---|---|
Rust Diesel | ✓ | ✓ | ||
SQLx | ✓ | ✓ | ✓ | |
Sherloque | ✓ | ✓ | ✓ |
- It does not support SQL connection, it merely provide SDKs with properly typed functions that generate SQL queries.