Generate sql query from a concise query syntax inspired from EdgeDB and GraphQL.
Online Playground: https://better-sql.surge.sh
- output typical sql query, compatible with mysql, postgres, sqlite, e.t.c.
- automatically add table name on columns if not specified
- inner join with nested
table {fields}
- left join with nested
table [fields]
- nested
select
sub-query -
where
statement -
having
statement -
group by
statement - aggregate function, e.g.
sum(score)
-
order by
statement -
limit
andoffset
statement
export function queryToSQL(query: string): string
import { queryToSQL } from 'better-sql.ts'
import { db } from './db'
let keyword = '%script%'
let query = 'select post [...] where title like :keyword'
let sql = queryToSQL(query)
let result = db.query(sql, { keyword })
A query in better-sql:
select post [
id as post_id
title
author_id
user as author { nickname, avatar } where delete_time is null
type_id
post_type {
name as type
is_hidden
} where is_hidden = 0 or user.is_admin = 1
] where created_at >= :since
and delete_time is null
and title like :keyword
order by created_at desc
limit 25
|
is converted into formatted sql as below:
select
post.id as post_id
, post.title
, post.author_id
, author.nickname
, author.avatar
, post.type_id
, post_type.name as type
, post_type.is_hidden
from post
inner join user as author on author.id = post.author_id
inner join post_type on post_type.id = post.post_type_id
where author.delete_time is null
and (post_type.is_hidden = 0
or user.is_admin = 1)
and post.created_at >= :since
and post.delete_time is null
and post.title like :keyword
order by
post.created_at desc
limit 25 |
Details refers to sample.ts and lang.spec.ts
This project is licensed with BSD-2-Clause
This is free, libre, and open-source software. It comes down to four essential freedoms [ref]:
- The freedom to run the program as you wish, for any purpose
- The freedom to study how the program works, and change it so it does your computing as you wish
- The freedom to redistribute copies so you can help others
- The freedom to distribute copies of your modified versions to others