Current collected state Current
Observed since 20 Oct, 20:37 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
5no-pg-builder
Simple query builder for PostgreSQL
PG BuilderSimple query builder for PostgreSQL
This package has moved to @5no/pg-builder
@5no/pg-builder requires Node version 8 or above.
npm install --save @5no/pg-builder
DATABASE_URL=postgres://test:123123@127.0.0.1:5432/testDB?ssl=false
DATABASE_QUERY_LOG=true
{
table: "users",
alias: "Testusers",
schema: "custom",
rowsHandler: fn(rows, method: 'select' | 'count' | 'update' | 'delete'),
}
async execute() // Return PG result
async rows() // Return rows of PG result
async result() // Return summary of count_rows, use only with count
async query() // Return raw query text
SELECT
const Manager = require('@5no/pg-builder')
const Users = await Manager.build({
table: "users"
}).select(["*"]).execute()
// "SELECT users.* FROM public.users AS users"
const Users = await Manager.build({
table: "users",
alias: "Testusers"
}).select(["*"]).execute()
// "SELECT Testusers.* FROM public.users AS Testusers"
const Users = await Manager.build({
table: "users",
alias: "Testusers",
schema: "custom"
}).select(["*"])
.execute()
// "SELECT Testusers.* FROM custom.users AS Testusers"
const Users = await Manager.build({
table: "users",
alias: "Testusers",
schema: "custom"
}).select(["sum(email) AS sum_emails"])
.execute()
// "SELECT sum(Testusers.email) AS sum_emails FROM custom.users AS Testusers"
const Users = await Manager.build({
table: "users",
alias: "Testusers",
schema: "custom"
}).select(["email", "first_name", "last_name AS FN"])
.where('status', '=', 'active')
.whereIn('id', ['1', '2', '3'])
.whereOr('email', '=', 'test')
.whereOr('email', '=', 'test1')
.execute()
// "SELECT Testusers.email, Testusers.first_name, Testusers.last_name AS FN FROM custom.users AS Testusers WHERE Testusers.status = $1 AND Testusers.id IN ($2,$3,$4) AND (Testusers.email = $5 OR Testusers.email = $6)"
const Users = await Manager.build({
table: "users",
alias: "Testusers",
schema: "custom"
}).select(["email", "first_name", "last_name AS FN"])
.whereOr('email', '=', 'test', 'email')
.whereOr('email', '=', 'test1', 'email')
.whereOr('last_name', '=', 'last_name1', 'last_name')
.whereOr('last_name', '=', 'last_name2', 'last_name')
.execute()
// "SELECT Testusers.email, Testusers.first_name, Testusers.last_name AS FN FROM custom.users AS Testusers WHERE (Testusers.email = $1 OR Testusers.email = $2) AND (Testusers.last_name = $3 OR Testusers.last_name = $4)"
const Users = await Manager.build({
table: "users",
alias: "Testusers",
schema: "custom"
}).select(["email", "first_name", "last_name AS FN"])
.distinct()
.where('first_name', '=', 'first_name_test')
.order('email', 'ASC')
.order('first_name', 'DESC')
.limit(10, 5)
.execute()
// "SELECT DISTINCT Testusers.email, Testusers.first_name, Testusers.last_name AS FN FROM custom.users AS Testusers WHERE Testusers.first_name = $1 ORDER BY Testusers.email ASC, Testusers.first_name DESC LIMIT 10 OFFSET 5"
const Users = await Manager.build({
table: "users",
alias: "Testusers",
schema: "custom"
}).select(["email"])
.where('first_name', '=', 'first_name_test')
.group(['email'])
.order('email', 'ASC')
.having('count(email)', '>', '1')
.execute()
// "SELECT Testusers.email FROM custom.users AS Testusers WHERE Testusers.first_name = $1 GROUP BY Testusers.email HAVING count(Testusers.email) > $2 ORDER BY Testusers.email ASC"
const Users = await Manager.build({
table: "users",
alias: "Testusers",
schema: "custom"
}).select(["email"])
.where('first_name', '=', 'first_name_test')
.whereBetween('created_at', '2019-10-12', '2019-11-12')
.group(['email'])
.order('email', 'ASC')
.having('count(email)', '>', '1')
.execute()
// "SELECT Testusers.email FROM custom.users AS Testusers WHERE Testusers.first_name = $1 AND Testusers.created_at BETWEEN $2 AND $3 GROUP BY Testusers.email HAVING count(Testusers.email) > $4 ORDER BY Testusers.email ASC"
const Users = await Manager.build({
table: "users",
alias: "Testusers",
schema: "custom"
}).select(["email"])
.where('first_name', '=', 'first_name_test')
.whereNotBetween('created_at', '2019-10-12', '2019-11-12')
.group(['email'])
.order('email', 'ASC')
.having('count(email)', '>', '1')
.execute()
// "SELECT Testusers.email FROM custom.users AS Testusers WHERE Testusers.first_name = $1 AND Testusers.created_at NOT BETWEEN $2 AND $3 GROUP BY Testusers.email HAVING count(Testusers.email) > $4 ORDER BY Testusers.email ASC"
const Users = await Manager.build({
table: "users",
alias: "Testusers",
schema: "custom"
}).count("email")
.distinct()
.execute()
//SELECT COUNT(DISTINCT TestUser.email) AS count_rows FROM custom.users AS TestUser
SELECT WITH JOIN
const SelectQueryInfo = await Manager.build({
table: "users_info",
schema: "custom"
}).select()
.where('status', '=', 't')
.order('created_at', 'DESC')
const SelectQueryAddress = await Manager.build({
table: "users_address",
schema: "custom"
}).select(["*"])
.where('number', '=', '100')
const Users = await Manager.build({
table: "users",
alias: "Testusers",
schema: "custom"
}).select(["email", "first_name", "last_name AS FN"])
.innerJoin(SelectQueryInfo, 'id', 'users_id')
.leftJoin(SelectQueryAddress, 'id', 'users_id')
.where('first_name', '=', 'first_name_test')
.whereIsNull('last_name')
.execute()
//SELECT Testusers.email, Testusers.first_name, Testusers.last_name AS FN, users_address.* FROM custom.users AS Testusers INNER JOIN custom.users_info AS users_info ON Testusers.id = users_info.users_id LEFT JOIN custom.users_address AS users_address ON Testusers.id = users_address.users_id WHERE Testusers.first_name = $1 AND Testusers.last_name IS NULL AND users_info.status = $2 AND users_address.number = $3 ORDER BY users_info.created_at DESC
const Users = await Manager.build({
table: "users",
alias: "Testusers",
schema: "custom"
}).select(["email", "first_name", "last_name AS FN"])
.innerJoin(SelectQueryInfo, 'id', 'users_id')
.leftJoin(SelectQueryAddress, 'id', 'users_id')
.where('id', '=', {
builder: SelectQueryInfo,
field: 'users_id'
})
.execute()
//SELECT Testusers.email, Testusers.first_name, Testusers.last_name AS FN, users_address.* FROM custom.users AS Testusers INNER JOIN custom.users_info AS users_info ON Testusers.id = users_info.users_id LEFT JOIN custom.users_address AS users_address ON Testusers.id = users_address.users_id WHERE Testusers.id = users_info.users_id AND users_info.status = $1 AND users_address.number = $2 ORDER BY users_info.created_at DESC
INSERT
const data = {
email: 'test@test.com',
first_name: 'Test',
last_name: null
}
const Users = await Manager.build({
table: "users",
schema: "custom"
}).insert(data)
.returning()
.execute()
//INSERT INTO custom.user AS user (email, first_name, last_name) VALUES ($1, $2, NULL) RETURNING user.*
const Users = await Manager.build({
table: "users",
schema: "custom"
}).insert(data)
.onConflict(['email'])
.doNothing()
.returning()
.execute()
//INSERT INTO custom.user AS user (email, first_name, last_name) VALUES ($1, $2, NULL) ON CONFLICT (email) DO NOTHING RETURNING user.*
const Users = await Manager.build({
table: "users",
schema: "custom"
}).insert(data)
.onConflict(['email'])
.doUpdate(['email', 'first_name', 'last_name'])
.returning()
.execute()
//INSERT INTO custom.user AS user (email, first_name, last_name) VALUES ($1, $2, NULL) ON CONFLICT (email) DO UPDATE SET email = $2, first_name = $3, last_name = NULL WHERE user.email = $2 RETURNING user.*
UPDATE
const data = {
email: 'test1@test.com',
first_name: 'Test1',
last_name: null
}
const Users = await Manager.build({
table: "users",
schema: "custom"
}).update(data)
.where("id", "=", "123")
.execute()
//UPDATE custom.users AS users SET email = $1, first_name = $2, last_name = NULL WHERE users.id = $3
UPDATE WITH JOIN
const data = {
email: 'test@test.a.a',
first_name: {
builder: SelectQueryInfo,
field: 'users_id',
}
}
const SelectQuery = Manager.build({
table: "user",
alias: "TestUser",
schema: "custom"
}).update(data)
.innerJoin(SelectQueryInfo, 'id', 'users_id')
.where("id", "=", "123")
.returning(['email'])
.execute()
//UPDATE custom.user AS TestUser SET email = $1, first_name = users_info.users_id FROM custom.users_info AS users_info WHERE TestUser.id = $2 AND TestUser.id = users_info.users_id RETURNING TestUser.email
DELETE
const Users = await Manager.build({
table: "users",
schema: "custom"
}).delete()
.where("id", "=", "123")
.execute()
//DELETE FROM custom.users AS users WHERE users.id = $1
DELETE WITH JOIN
const Users = await Manager.build({
table: "users",
schema: "custom"
}).delete()
.join(SelectQueryInfo, 'id', 'users_id')
.where("id", "=", "123")
.execute()
//DELETE FROM custom.users AS users USING custom.users_info AS users_info WHERE users.id = $1 AND TestUser.id = users_info.users_id
TRANSACTION
await Manager.begin()
await Manager.build({
table: "users",
schema: "custom"
}).delete()
.where("id", "=", "1233")
.execute()
await Manager.build({
table: "users",
schema: "custom"
}).delete()
.where("id", "=", "1234")
.execute()
await Manager.commit() // or await Manager.rollback()
RAW QUERY
const Manager = require('@5no/pg-builder')
const SelectQueryInfo = await Manager.query("SELECT Testusers.email, Testusers.first_name, Testusers.last_name AS FN, users_address.* FROM custom.users AS Testusers INNER JOIN custom.users_info AS users_info ON Testusers.id = users_info.users_id LEFT JOIN custom.users_address AS users_address ON Testusers.id = users_address.users_id WHERE Testusers.first_name = $1 AND users_info.status = $2 AND users_address.number = $3 ORDER BY users_info.created_at DESC", [
"one",
"two",
"three"
])
//SELECT Testusers.email, Testusers.first_name, Testusers.last_name AS FN, users_address.* FROM custom.users AS Testusers INNER JOIN custom.users_info AS users_info ON Testusers.id = users_info.users_id LEFT JOIN custom.users_address AS users_address ON Testusers.id = users_address.users_id WHERE Testusers.first_name = $1 AND users_info.status = $2 AND users_address.number = $3 ORDER BY users_info.created_at DESC
MIT Licensed, Copyright (c) 2018 Aleksandr Sokol
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
dotenvEnvironment{
"local_name": "dotenv",
"alias": false,
"peer_metadata": null
} | ^6.1.0 | runtime |
pgEnvironment{
"local_name": "pg",
"alias": false,
"peer_metadata": null
} | ^7.5.0 | runtime |
pg-poolEnvironment{
"local_name": "pg-pool",
"alias": false,
"peer_metadata": null
} | ^2.0.0 | runtime |
urlEnvironment{
"local_name": "url",
"alias": false,
"peer_metadata": null
} | ^0.11.0 | runtime |
babel-cliEnvironment{
"local_name": "babel-cli",
"alias": false,
"peer_metadata": null
} | ^6.26.0 | development |
babel-coreEnvironment{
"local_name": "babel-core",
"alias": false,
"peer_metadata": null
} | ^6.26.0 | development |
babel-eslintEnvironment{
"local_name": "babel-eslint",
"alias": false,
"peer_metadata": null
} | ^10.0.1 | development |
babel-preset-es2015Environment{
"local_name": "babel-preset-es2015",
"alias": false,
"peer_metadata": null
} | ^6.24.1 | development |
babel-preset-stage-0Environment{
"local_name": "babel-preset-stage-0",
"alias": false,
"peer_metadata": null
} | ^6.24.1 | development |
chaiEnvironment{
"local_name": "chai",
"alias": false,
"peer_metadata": null
} | ^4.2.0 | development |
eslintEnvironment{
"local_name": "eslint",
"alias": false,
"peer_metadata": null
} | ^4.0.0 | development |
eslint-config-standardEnvironment{
"local_name": "eslint-config-standard",
"alias": false,
"peer_metadata": null
} | ^11.0.0 | development |
eslint-plugin-importEnvironment{
"local_name": "eslint-plugin-import",
"alias": false,
"peer_metadata": null
} | ^2.8.0 | development |
eslint-plugin-nodeEnvironment{
"local_name": "eslint-plugin-node",
"alias": false,
"peer_metadata": null
} | ^7.0.1 | development |
eslint-plugin-promiseEnvironment{
"local_name": "eslint-plugin-promise",
"alias": false,
"peer_metadata": null
} | ^4.0.0 | development |
eslint-plugin-standardEnvironment{
"local_name": "eslint-plugin-standard",
"alias": false,
"peer_metadata": null
} | ^3.0.0 | development |
mochaEnvironment{
"local_name": "mocha",
"alias": false,
"peer_metadata": null
} | ^5.2.0 | development |
Source distribution
{
"integrity": "sha512-YfF5qn4jmqQWqq1ZKfx7QoDJ5DV4rNCW7T/ZFdqJIifDb030ycc1oMoid+33BZEhXITJcca3tRNRstzSyfv4Eg==",
"shasum": "dad8ed300f687f966d261b667d46fb4d1dc223f5",
"tarball": "https://registry.npmjs.org/5no-pg-builder/-/5no-pg-builder-1.0.1.tgz",
"fileCount": 117,
"unpackedSize": 196720,
"npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2vBpCRA9TVsSAnZWagAAOVcQAI2JuoXqnyknnhid4gU1\nAAFjn/1QXBRKyx4Ti6OfoVeD0w++LZdSQ6X3jKcx0UDyl5SNOQGAnWCOvR5M\n2CU6bmwH5jI5WZqdnVMpPHYOUCMl/nj0/OwvdWo9WlS2PLXomg579GmpZPit\nenThrTOVWgpyBrSv4MeWEJ59s/1ovvQn7GzSAc1W142+fSo5S4FyF7w7hipc\nHOP033t6Za/84QzBdAaAY/rNhJ6RDCd/pPv7XnCfIdot+EZcPnZ9s3Dsx/GU\ni+s5z0xFJeKIX7Uj8p4ArJ0oNyHLYCgsZGysj0Neniz+OZUfPi3bAsELBOFL\nvOhbUedUaGcDprE5gBGTrDfXOWf2Fi3oLgsZhnHeZ801dVhVg5/EVG9C01N7\nGkY3Nd56U6s+Jnn18HT1kXQ2QNLWiCiKKVMIezVshMiIwjKV/ZZ5RKam82IK\nRxyCtcLqPDIUv30I7KW+Fx7Fzn+X9zEU9uJJ4KVbPARfjDMEop3QC3ckULga\nADxe61BtZjMDKG+p1Pqj0gyZolzTh3aCqN/aTp4Z5ZC702/FFSQbG36hXkKU\n9a/T7EJgN7yOaQcp1qekk8vNzIM0KgpHs3QHhQatadCnSNgemRdTaqr/St3G\nIgZIA1ATRuvD0dQjDuAAXQrADVtjzd76bCusm8WFYnT3+Q9Hh9Xk/ZMsi376\n1LFQ\r\n=O/BV\r\n-----END PGP SIGNATURE-----\r\n",
"signatures": [
{
"keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA",
"sig": "MEYCIQCwWBC7JtexIg3Sm6no2KpW3IzumaIWIz0cbLjJFG3ZpgIhAMtKhuYutEA9oP2igxS/Y7Pz4cmDfqOxg5WONUegxsAb"
}
]
}Observed since 20 Oct, 20:37 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:8140db9caec0defecc36875abe47cc474e2f7b36ebf6aeb666ba6fbf1a0abbb6