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

app sherloque

A language agnostic SQL SDK generator

1 unstable release

0.0.1 Jun 12, 2021

#51 in #null

MIT/Apache

8KB
168 lines

Sherloque

What is Sherloque?

Sherloque is a language agnostic SQL SDK generator. Inspired by GraphqQL Code Generator

Why Sherloque?

You will want Sherloque if:

  1. You want to know if your SQL queries are correct without actually running it
  2. You want the return type of your SQL queries
  3. You don't want to use macros/template
  4. You want to write pure SQL

How it works?

You just need to provide 3 kind of files:

  1. Database schema (CREATE TABLE ...)
  2. SQL operations (SELECT/UPDATE/DELETE)
  3. Sherloque configuration

Example

  1. 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)
);
  1. 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;
  1. Sherloque config
{
  "language": "typescript",
  "schemas": "./schema/**/*.sql",
  "operations": "./src/**/*.sql",
  "output": "./sdk.ts",
  "database": "mysql"
}
  1. 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
  }
}

How it is different from other libraries?

Library SQL Verification Pure SQL Support Language Agnostic Database Connection
Rust Diesel
SQLx
Sherloque

Why you might not want to use Sherloque

  1. It does not support SQL connection, it merely provide SDKs with properly typed functions that generate SQL queries.

Dependencies

~1.5MB
~29K SLoC