https://github.com/131/sql-template
Nodejs template string for SQL queries
https://github.com/131/sql-template
Last synced: 12 months ago
JSON representation
Nodejs template string for SQL queries
- Host: GitHub
- URL: https://github.com/131/sql-template
- Owner: 131
- Created: 2016-05-07T10:06:23.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2024-05-22T12:55:56.000Z (about 2 years ago)
- Last Synced: 2025-04-09T16:48:47.658Z (about 1 year ago)
- Language: JavaScript
- Size: 36.1 KB
- Stars: 16
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Motivation
Template string builder for SQL.
[](https://github.com/131/sql-template/actions/workflows/test.yml)
[](https://coveralls.io/github/131/sql-template?branch=master)
[](https://www.npmjs.com/package/sql-template)
[](https://www.npmjs.com/package/eslint-plugin-ivs)
## Key features
* tag based (easily extensible)
* made with love
* very simple
* drop in compatible with pg
* strongly tested with 100% code coverage
# API/Usage
```
var SQL = require('sql-template');
pg(SQL`SELECT * FROM foo`)
{text: 'SELECT * FROM foo', values: []}
pg(SQL`SELECT * FROM foo WHERE age > ${22}`)
{text: 'SELECT * FROM foo WHERE age > $1 ', values: [22]}
```
# Tags (transformers) list
## $where$
```
pg(SQL`SELECT * FROM foo $where${ {name:'John doe'} }`)
{text: 'SELECT * FROM foo WHERE "name" = $1 ', values: ["John doe"]}
pg(SQL`SELECT * FROM foo $where${ {id: [1,2,3], type:'snow'} }`)
{text: 'SELECT * FROM foo WHERE "id" IN($1,$2,$3) AND "type"=$4 ', values: [1,2,3,"snow"]}
```
## $set$
```
pg(SQL`UPDATE foo $set${ {joe: 22, bar: 'ok'} }`)
{text: 'UPDATE foo SET "joe"=$1,"bar"=$2', values: [22, 'ok']}
```
## $keys$
```
pg(SQL`INSERT INTO foo $keys${["joe", "bar"]} VALUES (${22}, ${'ok'})}`)
{text: 'INSERT INTO foo ("joe", "bar") VALUES ($1,$2), values: [22, 'ok']}
```
## $values$
```
pg(SQL`INSERT INTO foo (joe, bar) $values${ {joe: 22, bar: 'ok'} }`)
{text: 'INSERT INTO foo (joe, bar) VALUES ($1,$2), values: [22, 'ok']}
const obj = {joe: 22, bar: 'ok'};
pg(SQL`INSERT INTO foo $keys${Object.keys(obj)} $values${obj}`)
{text: 'INSERT INTO foo ("joe","bar") VALUES ($1,$2), values: [22, 'ok']}
```
or use the `SQL.insert` static api.
## $id$
```
pg(SQL`SELECT * FROM $id${'foo'}`)
{text: 'SELECT * FROM "foo"', values: []}
```
## $in$
```
pg(SQL`SELECT * FROM foo WHERE id $in${[1,2,3]}`)
{text: `SELECT * FROM foo WHERE id IN($1,$2,$3)', values: [1,2,3]}
```
Note that transformers internaly use `?:` as parameter placeholder, per jsonb compliance.
# Static API
## SQL.insert
```
pq(SQL.insert('foo', {joe: 22, bar: 'ok'}))
{text: 'INSERT INTO foo ("joe","bar") VALUES ($1,$2), values: [22, 'ok']}
```
## SQL.insert_bulk
```
pq(SQL.insert_bulk("foo", ["age", "name"], [[22, "ok"], [45, "ng"]]))
{text: 'INSERT INTO "foo" ("age","name") VALUES ($1,$2),($3,$4)', values: [ 22, 'ok', 45, 'ng' ]}
```
## SQL.update
```
pq(SQL.update("foo", { joe: 22, bar: "ok" }, { name: "John doe" }))
{text: 'UPDATE "foo" SET "joe"=$1,"bar"=$2 WHERE "name"=$3', values: [22, "ok", "John doe"]}
```
## SQL.select
```
pq(SQL.select("foo", { name: "John doe" }, ["name", "age"]))
{text: 'SELECT name,age FROM "foo" WHERE "name"=$1 ', values: [ 'John doe' ]}
```
## SQL.search_blob (search_field, expression)
Compute a smart query expression.
# TODO
* Get rich or die tryin'
# Shoutbox, keywords, SEO love
pg, sql, sql-string, sql-builder, ES6 template string, prepared statement, escape, "Let's have a beer & talk in Paris"
# Credits
* [131](https://github.com/131)