https://github.com/ericadamski/knex-case
⚙️ A Knex.js _plugin_ to add case statement support
https://github.com/ericadamski/knex-case
knex knex-plugin knexjs
Last synced: about 1 month ago
JSON representation
⚙️ A Knex.js _plugin_ to add case statement support
- Host: GitHub
- URL: https://github.com/ericadamski/knex-case
- Owner: ericadamski
- Created: 2018-05-10T15:56:38.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-09-03T00:04:45.000Z (almost 8 years ago)
- Last Synced: 2025-02-07T21:06:32.980Z (over 1 year ago)
- Topics: knex, knex-plugin, knexjs
- Language: JavaScript
- Size: 89.8 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# knex-case
⚙️ A Knex.js _plugin_ to add case statement support
## Installation
```
$ yarn add knex-case
```
or
```
$ npm i knex-case
```
## Usage
#### Simple
```SQL
(CASE WHEN column=1 THEN 1 ELSE 0 END)
```
```javascript
require('knex-case');
const Knex = require('knex')({ client: 'mssql' });
const q = Knex.queryBuilder()
.when('column', '=', 1)
.thenElse(1, 0)
.toQuery();
console.log(q); // (CASE WHEN column=1 THEN 1 ELSE 0 END);
```
#### Conditional Simple
```SQL
(CASE WHEN column=1 OR column=2 THEN 1 ELSE 0 END)
```
```javascript
require('knex-case');
const Knex = require('knex')({ client: 'mssql' });
const q = Knex.queryBuilder()
.when('column', '=', 1)
.orWhen('column', '=', 2)
.thenElse(1, 0)
.toQuery();
console.log(q); // (CASE WHEN column=1 OR column=2 THEN 1 ELSE 0 END);
```
#### Multiple Clauses
```SQL
(CASE WHEN column=1 THEN 1 WHEN column=2 THEN 2 ELSE 0 END)
```
```javascript
require('knex-case');
const Knex = require('knex')({ client: 'mssql' });
const q = Knex.queryBuilder()
.when('column', '=', 1)
.thenElse(1)
.when('column', '=', 2)
.thenElse(2)
.else(0)
.toQuery();
console.log(q); // (CASE WHEN column=1 THEN 1 WHEN column=2 THEN 2 ELSE 0 END);
```
#### Nested Simple
```SQL
(CASE WHEN column=1 THEN (CASE WHEN column='' THEN 2 ELSE 0 END) ELSE 0 END)
```
```javascript
require('knex-case');
const Knex = require('knex')({ client: 'mssql' });
const q = Knex.queryBuilder()
.when('column', '=', 1)
.thenElse(
Knex.queryBuilder()
.when('column', '=', `''`)
.thenElse(2, 0)
)
.else(0)
.toQuery();
console.log(q); // (CASE WHEN column=1 THEN (CASE WHEN column='' THEN 2 ELSE 0 END) ELSE 0 END);
```
## Caveats
#### String Escaping
Currently if you want to output correct SQL that includes string comparisons (ie. `something='some-string'`) you will have to escape the internal value.
Example:
```javascript
// String literals
Knex.queryBuilder().when('something', '=', `'some-string'`);
// Escape sequences
Knex.queryBuilder().when('something', '=', "'some-string'");
// Alternating quotations
Knex.queryBuilder().when('something', '=', "'some-string'");
```