better-sql.ts
TypeScript icon, indicating that this package has built-in type declarations

1.0.2 • Public • Published

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

  • [x] output typical sql query, compatible with mysql, postgres, sqlite, e.t.c.
  • [x] automatically add table name on columns if not specified
  • [x] inner join with nested table {fields}
  • [x] left join with nested table [fields]
  • [x] nested select sub-query
  • [x] where statement
  • [x] having statement
  • [x] group by statement
  • [x] aggregate function, e.g. sum(score)
  • [x] order by statement
  • [x] 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

Package Sidebar

Install

npm i better-sql.ts

Weekly Downloads

1

Version

1.0.2

License

BSD-2-Clause

Unpacked Size

81 kB

Total Files

15

Last publish

Collaborators

  • beenotung