@imatic/pgqb
Functional PostgreSQL query builder
Last updated 2 days ago by nenadalm .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install @imatic/pgqb 
SYNC missed versions from official npm registry.

Build Status License: MIT

pgqb

This library allows you to create dynamic sql queries.

In case of simple queries, you could just use template literals:

const sql = `
SELECT *
FROM "table"
`

In case you have lots of parameters, you could use sql-template-strings:

import {SQL} from 'sql-template-strings';

const sqlStatement = `
INSERT INTO "table"
    ("col1", "col2")
VALUES
    (${val1}, ${val2})
`;

But what if you want to create queries dynamically? Splitting queries into several string parts, modifying several parts separately and then concatenating them togheter? There is better way - building queries as javascript data structures, which can be then easilly manipulated, merged, ...

Let's see previous query built using this library:

import * as qb from '@imatic/pgqb';

const sqlMap = qb.merge(
    qb.insertInto('table'),
    qb.columns(['col1', 'col2']),
    qb.values([
        [
            qb.val.inlineParam(val1),
            qb.val.inlineParam(val2),
        ]
    ])
);

const sqlStatement = qb.toSql(sqlMap);

Query above automatically escapes identifiers (tables, colums). For now, building the query using this library seems more verbose than using just sql-template-strings. Imagine you would want to modify the query though. If you wanted to add additional column, you could do it like so:

import * as qb from '@imatic/pgqb';

const sqlMap = qb.merge(
    qb.insertInto('table'),
    qb.columns(['col1', 'col2']),
    qb.values([
        [
            qb.val.inlineParam(val1),
            qb.val.inlineParam(val2),
        ]
    ])
);

const additionalColumn = qb.merge(
    qb.columns(['col3']),
    qb.values([
        [
            qb.val.inlineParam(val3),
        ]
    ])
)

const sqlStatement = qb.toSql(qb.append(sqlMap, additionalColumn));

Your query now inserts 3 columns instead of original 2. You can append other clauses (like where) too.

Inspiraton

This library was inspired by honeysql.

Current Tags

  • 0.1.21                                ...           latest (2 days ago)

19 Versions

  • 0.1.21                                ...           2 days ago
  • 0.1.20                                ...           9 days ago
  • 0.1.19                                ...           3 months ago
  • 0.1.18                                ...           4 months ago
  • 0.1.17                                ...           4 months ago
  • 0.1.16                                ...           4 months ago
  • 0.1.15                                ...           a year ago
  • 0.1.14                                ...           2 years ago
  • 0.1.13                                ...           3 years ago
  • 0.1.12                                ...           3 years ago
  • 0.1.11                                ...           3 years ago
  • 0.1.10                                ...           3 years ago
  • 0.1.9                                ...           3 years ago
  • 0.1.8                                ...           3 years ago
  • 0.1.7                                ...           3 years ago
  • 0.1.6                                ...           3 years ago
  • 0.1.2                                ...           3 years ago
  • 0.1.1                                ...           3 years ago
  • 0.1.0                                ...           3 years ago
Maintainers (2)
Downloads
Today 0
This Week 14
This Month 33
Last Day 2
Last Week 15
Last Month 4
Dependencies (4)
Dev Dependencies (7)
Dependents (0)
None

Copyright 2014 - 2016 © taobao.org |