Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vajahath/sqlify
Yet another sql query builder.
https://github.com/vajahath/sqlify
mysql node-module nodejs npm npm-package postgres postgresql query query-builder sql sql-query sql-query-builder
Last synced: about 13 hours ago
JSON representation
Yet another sql query builder.
- Host: GitHub
- URL: https://github.com/vajahath/sqlify
- Owner: vajahath
- License: mit
- Created: 2017-03-28T09:20:51.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2022-12-30T19:32:23.000Z (about 2 years ago)
- Last Synced: 2024-12-13T18:00:23.982Z (about 1 month ago)
- Topics: mysql, node-module, nodejs, npm, npm-package, postgres, postgresql, query, query-builder, sql, sql-query, sql-query-builder
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/sqlify
- Size: 854 KB
- Stars: 14
- Watchers: 3
- Forks: 3
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Sqlify
Yet another SQL query builder.
[![npm](https://img.shields.io/npm/v/sqlify.svg)](https://www.npmjs.com/package/sqlify)
![Build Status](https://github.com/vajahath/sqlify/workflows/Build/badge.svg)
[![T](https://img.shields.io/badge/TypeScript%20Ready-.d.ts%20included-blue.svg)]()
[![npm](https://img.shields.io/npm/dt/sqlify.svg)](https://www.npmjs.com/package/sqlify)
[![Greenkeeper badge](https://badges.greenkeeper.io/vajahath/sqlify.svg)](https://greenkeeper.io/)> There are many sql query builders out there. But this one makes more sense to me :wink:.
![](media/sqlify.png)
## Install
```bash
npm install --save sqlify
```## Why
* This package is a wrapper around [squel](https://hiddentao.com/squel) module to make it more friendly. (Check that package to know its maintenance status)
* Helps you to build dynamic sql queries.
* **Example use case:** suppose, you are getting a POST request to insert some data to your SQL database.
You'll get the data in `req.body` as `{name: "Swat", age: 22, address: "ND"}`.
Now make the query like:```js
const resource = {
set: req.body
where: {
id: 5
}
}sqlify(chain, resource); // done!
```> Warning ⚠️: Do not ever pass queries generated on the client side to your web server for execution. The above example is only a use case. Do NOT copy paste as such.
## Examples
#### SELECT
```js
const { squel, sqlify } = require('sqlify');const resource = {
field: ['name', 'age', 'address'],
where: {
name: 'Swat',
age: 22,
},
};const chain = squel.select().from('users');
sqlify(chain, resource);
chain.toString();
// => SELECT name, age, address FROM users WHERE (name=Swat) AND (age=22)
```##### Starter Guide For TypeScript
```ts
import { squel, sqlify, Resource } from 'sqlify'// `Resource` is type.
const resource :Resource = {
field: ['name', 'age', 'address'],
where: {
name: 'Swat',
age: 22,
},
};// ...
```#### SELECT with a simple JOIN
```js
// ...const resource = {
field: ['user.*', 'hobbies.hobby', 'colors.favorite'],
where: {
name: 'Swat',
age: 22,
},
join: [
['hobbies', null, 'hobbies.id = user.id'],
['colors', null, 'colors.user_id = user.id'],
];
}
const chain = squel.select().from('Hero');sqlify(chain, resource);
chain.toString();
/*
SELECT
user.*,
hobbies.hobby,
colors.favorite
FROM Hero
INNER JOIN hobbies
ON (hobbies.id = user.id)
INNER JOIN colors
ON (colors.user_id = user.id)
WHERE (name='Swat') AND (age=22)
*/
```Read the JOIN section of [squel docs](https://hiddentao.com/squel/#select) for more.
#### INSERT
```js
const { squel, sqlify } = require('sqlify');const resource = {
set: {
name: 'Swat',
age: 22,
},
};const chain = sql.insert().into('users');
sqlify(chain, resource);chain.toString();
// => INSERT INTO users (name, age) VALUES ('Swat', 22)
```## How?
`sqlify` exposes a **function**, **module** ([squel](https://www.npmjs.com/package/squel)) and a `Resource` type (for using with TypeScript).
The function receives 2 arguments. They are:
* `chain`
* `resource`#### Step 1: Require the package
```js
const { squel, sqlify } = require('sqlify');
```#### Step 2: Initialize `chain` and `resource`
`chain` is an instance of [squel](https://www.npmjs.com/package/squel).
For example,```js
// ...const chain = squel.select().from('users');
// ...
````resource` is an object which contains the data to build the query.
Example:
```js
// ...const resource = {
field: ['name', 'age', 'address'],
where: {
name: 'Swa',
age: 22
}
};// ...
```Where, the properties of `resource` object (in the above case, `field` and `where`) are taken from the chain function names of the [squel](https://www.npmjs.com/package/squel). There are more. Refer their docs and use them accordingly.
> When used with TypeScript, you should mark type of `resource` with the `import`ed `Resource` class.
> Like `const resource:Resource = {...}`.#### Step 3: Sqlify
```js
// ...sqlify(chain, resource);
// ...
````sqlify` function wont return anything. It simply do things in in-place.
#### Step 4: Watch stuff
```js
// ...// parse query
const query = chain.toString();
// see it
console.log(query);
// => SELECT name, age, address FROM users WHERE (name='Swa') AND (age=22)// ...
```_Unclear about something here? Feel free to rise an issue.._
## Also,
Since `sqlify` takes in and out chain functions, you can modify it **even after** `sqlify`ing it.
Example:
```js
// ...const chain = squel.select().from('users');
sqlify(chain, resource);
chain.limit(10);
chain.toString(); // Voila!
```### Supported Squel Functions
The following fields can be used inside the `resource` object. Logic behind the usage of these functions can be found at [squel docs](https://hiddentao.com/squel).
| | | | | |
| ---------- | ---------- | ---- | --------- | ---------- |
| `cross_join` | `field` | `join` | `left_join` | `outer_join` |
| `returning` | `right_join` | `set` | `where` | `group` |
| `order` | | | | |
| | | | | |## Contributors
* [Lakshmipriya](https://github.com/lakshmipriyamukundan)
## v1 to v2 migration guide
* **change the way you `require` the package:**
* in v1, you required `sqlify` along with `squel` as:
```js
const sqlify = require('sqlify');
const squel = require('squel');
// ...
```
* in v2 you've to change that code into:
```js
const { sqlify, squel } = require('sqlify');
// ...
```* **change in function name:** change `fields:[]` to `field:[]` in the `resource` object.
*Oh yes! it's that simple.*
## Change log
* v2.5.0, v2.5.1, v2.5.2
* Security Update
* v2.4.0
* TypeScript support and definitions
* Better docs
* v2.3.1
* enabling Greeenkeeper, better docs
* v2.3.0
* adds better error handling: (if an unsupported method is used, sqlify throws an err)
* v2.2.0
* adds `order` function from [squel-order](https://hiddentao.com/squel/api.html#select_order)
* better docs
* v2.1.1
* adds `group` function from [squel-group](https://hiddentao.com/squel/api.html#select_group)
* better docs
* v2.0.0
* fixing [#5](https://github.com/vajahath/sqlify/issues/5) and [#2](https://github.com/vajahath/sqlify/issues/2).
* more squel functions
* v1.0.4
* bug fix with 's in select queries
* v1.0.1, 1.0.2, 1.0.3
* bug fix (in `package.json`)
* better docs
* v1.0.0
* initial release## Licence
MIT © [Vajahath Ahmed](https://twitter.com/vajahath7)
[badge_paypal_donate]: https://cdn.rawgit.com/vajahath/cloud-codes/a01f087f/badges/paypal_donate.svg
[paypal-donations]: https://paypal.me/vajahath