Skip to content

Generate sql query from a concise query syntax inspired from EdgeDB and GraphQL

License

Notifications You must be signed in to change notification settings

beenotung/better-sql

Repository files navigation

better-sql.ts

Generate sql query from a concise query syntax inspired from EdgeDB and GraphQL.

npm Package Version

Online Playground: https://better-sql.surge.sh

Supported Features

  • 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 and offset statement

TypeScript Signature

export function queryToSQL(query: string): string

Usage

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 })

Example

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

License

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

About

Generate sql query from a concise query syntax inspired from EdgeDB and GraphQL

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages