Skip to content
This repository has been archived by the owner on Mar 24, 2024. It is now read-only.
/ sqorn Public archive

A Javascript library for building SQL queries

License

Notifications You must be signed in to change notification settings

sqorn/sqorn

Repository files navigation

Sqorn · License npm Supports Node 8+ npm Coverage Status

Sqorn is a Javascript library for building SQL queries.

Composable: Build complex queries from simple parts. Chain, extend, and embed queries.

Intuitive: Sqorn's use of modern Javascript language features like tagged template literals and promises makes building and issuing SQL queries a breeze.

Concise: Sqorn provides concise syntax for common CRUD operations.

Fast: 10x faster than Knex.js and 200x faster than Squel

Secure: Sqorn generates parameterized queries safe from SQL injection. Sqorn has no external dependencies.

Install

Sqorn requires Node version 8 or above.

npm install --save @sqorn/pg # only Postgres is currently supported

Then read the tutorial and try the online demo.

Examples

CRUD Operations are dead simple.

const sq = require('@sqorn/pg')()

const Person = sq`person`, Book = sq`book`

// SELECT
const children = await Person`age < ${13}`
// "select * from person where age < 13"

// DELETE
const [deleted] = await Book.delete({ id: 7 })`title`
// "delete from book where id = 7 returning title"

// INSERT
await Person.insert({ firstName: 'Rob' })
// "insert into person (first_name) values ('Rob')"

// UPDATE
await Person({ id: 23 }).set({ name: 'Rob' })
// "update person set name = 'Rob' where id = 23"

Build complex queries from simple parts.

// CHAIN QUERIES
sq.from`book`
  .return`distinct author`
  .where({ genre: 'Fantasy' })
  .where({ language: 'French' })
// select distinct author from book
// where language = 'French' and genre = 'Fantasy'

// EXTEND QUERIES
sq.extend(
  sq.from`book`,
  sq.return`distinct author`,
  sq.where({ genre: 'Fantasy' }),
  sq.where({ language: 'French' })
)
// select distinct author from book
// where language = 'French' and genre = 'Fantasy'

// EMBED Queries
sq.return`now() today, (${sq.return`now() + '1 day'`}) tomorrow`
// select now() today, (select now() + '1 day') tomorrow

Learn more in the tutorial.

Contributing

Sqorn is a monorepo managed with npm workspaces.

Clone the repo then run the following commands to install all dependencies:

npm install

npm test runs all tests. npm run clean removes all dependencies.

To run tests that connect to Postgres, you need a running postgres instance from somewhere. Then, you need to set the standard Postgres environment variables to tell the tests where to connect. If you add a .env file to this repo, the tests will use environment variables from there to connect.

// in `.env`
PGHOST=127.0.0.1
PGUSER=some-user
PGPASSWORD=some-password
PGPORT=5432
PGDATABASE=postgres

Maintainers

Sqorn is currently maintained by the @gadgetinc development team. Please direct support requests, bug reports, and other communication about Sqorn to this github repo.

Sqorn was originally created and maintained by @eejdoowad. Thanks to Sufyan for all their hard work creating the project!

License

MIT Licensed, Copyright (c) 2018 Sufyan Dawoodjee