https://github.com/rd-uk/rduk-data-pg
PostgreSQL Data Provider implementation for rduk-data
https://github.com/rd-uk/rduk-data-pg
data postgresql provider rduk
Last synced: 2 months ago
JSON representation
PostgreSQL Data Provider implementation for rduk-data
- Host: GitHub
- URL: https://github.com/rd-uk/rduk-data-pg
- Owner: rd-uk
- License: mit
- Created: 2018-01-16T20:53:39.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-05-15T23:37:01.000Z (about 6 years ago)
- Last Synced: 2025-10-17T08:59:45.889Z (8 months ago)
- Topics: data, postgresql, provider, rduk
- Language: JavaScript
- Size: 1.5 MB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# RDUK - PostgreSQL Data Provider
[](https://travis-ci.org/rd-uk/rduk-data-pg)
[](https://coveralls.io/github/rd-uk/rduk-data-pg?branch=master)
[](https://greenkeeper.io/)
[](https://standardjs.com)
This module is an implementation of `@rduk/data/lib/base` for [PostgreSQL](https://www.postgresql.org/).
## Installation
### Peer dependencies
Don't forget to add this modules to your project:
- [`@rduk/configuration`](https://github.com/rd-uk/rduk-configuration)
- [`@rduk/data`](https://github.com/rd-uk/rduk-data)
- [`@rduk/errors`](https://github.com/rd-uk/rduk-errors)
- [`pg`](https://www.npmjs.com/package/pg).
```sh
npm i --save @rduk/configuration @rduk/data pg @rduk/data-pg @rduk/errors
```
## Configuration
```yaml
# config.yml
---
connections:
-
name: conn1
user: ${PG_USER}
password: ${PG_PASSWORD}
database: ${PG_DB_NAME}
data:
default: pg
providers:
-
name: pg
type: '@rduk/data-pg'
connection: conn1
query:
provider: '@rduk/data-pg/queryProvider' # manage specific pg syntax
```
See [`@rduk/configuration`](https://github.com/rd-uk/rduk-configuration#readme) for more information.
## Usage
### Insert
First, instantiate a new QueryProvider
```js
const Visitor = require('@rduk/data/lib/sql/visitor/expression')
const PostgreSQLQueryProvider = require('@rduk/data-pg/lib/queryProvider')
const provider = new PostgreSQLQueryProvider(Visitor)
```
Next, prepare an `InsertExpression`
```js
const FieldExpression = require('@rduk/expression/lib/parser/expression/field')
const InsertExpression = require('@rduk/data/lib/sql/expression/insert')
const NameExpression = require('@rduk/expression/lib/parser/expression/name')
const PropertyExpression = require('@rduk/expression/lib/parser/expression/property')
const SourceExpression = require('@rduk/data/lib/expression/source')
let expression = new InsertExpression(new SourceExpression('users'))
let obj = new ObjectLiteralExpression([
new FieldExpression('email', new PropertyExpression(new NameExpression('this'), 'email')),
new FieldExpression('username', new PropertyExpression(new NameExpression('this'), 'username')),
new FieldExpression('password', new PropertyExpression(new NameExpression('this'), 'password')),
new FieldExpression('salt', new PropertyExpression(new NameExpression('this'), 'salt'))
])
let assignment = new LambdaExpression(obj, [])
expression.assignments.push(assignment)
```
Finally, execute your query
```js
provider.execute(expression, {
email: 'kimung@mail.test',
username: 'kimung',
password: '$2y$10$jMA23KsnU7kMQq1Wlr6PbOJWb0kD1j1P1RDdylfL739XE3gcX7UWq',
salt: '5f7086760c3d96f5f90faac2f46c59940d83d8c84df5beef3725d8d8f02171b1'
}).then(result => {
console.log(result);
})
/**
* The pool.query method of pg module will be called with:
* - command: 'INSERT INTO users (email, username, password, salt) VALUES ($1, $2, $3, $4) RETURNING *'
* - parameters: [
* 'kimung@mail.test',
* 'kimung',
* '$2y$10$jMA23KsnU7kMQq1Wlr6PbOJWb0kD1j1P1RDdylfL739XE3gcX7UWq',
* '5f7086760c3d96f5f90faac2f46c59940d83d8c84df5beef3725d8d8f02171b1',
* ]
*
*/
```
## License and copyright
See [LICENSE](LICENSE) file.