Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fxjs-modules/sql-query
fork version of node-sql-query, as one part of orm
https://github.com/fxjs-modules/sql-query
Last synced: 3 months ago
JSON representation
fork version of node-sql-query, as one part of orm
- Host: GitHub
- URL: https://github.com/fxjs-modules/sql-query
- Owner: fxjs-modules
- Archived: true
- Created: 2018-12-14T02:35:42.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2019-10-24T08:05:02.000Z (about 5 years ago)
- Last Synced: 2024-06-21T19:01:44.889Z (5 months ago)
- Language: JavaScript
- Size: 124 KB
- Stars: 0
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: History.md
Awesome Lists containing this project
- awesome - @fxjs/sql-query - sql queries builder (Packages / SQL)
README
# Fibjs SQL query builder
[![NPM version](https://img.shields.io/npm/v/@fxjs/sql-query.svg)](https://www.npmjs.org/package/@fxjs/sql-query)
[![Build Status](https://travis-ci.org/fxjs-modules/sql-query.svg)](https://travis-ci.org/fxjs-modules/sql-query)
[![Build status](https://ci.appveyor.com/api/projects/status/lg7ephk4a1mjdi0l/branch/master?svg=true)](https://ci.appveyor.com/project/richardo2016/sql-query/branch/master)**NOTICE**: This is [node-sql-query]'s fibjs version, thx a lot to [node-sql-query]'s author : )
## Install
```sh
npm install sql-query --save
```## Dialects
- MySQL
- SQLite
- MSSQL## About
This module is used by [@fxjs/orm](https://github.com/fxjs-modules/orm) to build SQL queries in the different supported dialects.
Sorry the API documentation is not complete. There are tests in `./test/integration` that you could read.# Usage
```js
var sql = require('@fxjs/sql-query')
var sqlQuery = sql.Query(); // for dialect: sql.Query('mysql')
```## Create
```js
var sqlCreate = sqlQuery.create();sqlCreate
.table('table1')
.build()"CREATE TABLE 'table1'()"
sqlCreate
.table('table1')
.field('id','id')
.build()"CREATE TABLE 'table1'('id' INTEGER PRIMARY KEY AUTO_INCREMENT)"
sqlCreate
.table('table1')
.fields({id: 'id', a_text: 'text'})
.build()"CREATE TABLE 'table1'('id' INTEGER PRIMARY KEY AUTO_INCREMENT,'a_text' TEXT)"
sqlCreate
.table('table1')
.fields({id: 'id', a_num: 'int'})
.build()"CREATE TABLE 'table1'('id' INTEGER PRIMARY KEY AUTO_INCREMENT,'a_num' INTEGER)"
sqlCreate
.table('table1')
.fields({id: 'id', a_num: 'float'})
.build()"CREATE TABLE 'table1'('id' INTEGER PRIMARY KEY AUTO_INCREMENT,'a_num' FLOAT(12,2))"
sqlCreate
.table('table1')
.fields({id: 'id', a_bool: 'bool'})
.build()"CREATE TABLE 'table1'('id' INTEGER PRIMARY KEY AUTO_INCREMENT,'a_bool' TINYINT(1))"
```## Select
```js
var sqlSelect = sqlQuery.select();sqlSelect
.from('table1')
.build();"SELECT * FROM `table1`"
sqlSelect
.from('table1')
.select('id', 'name')
.build();"SELECT `id`, `name` FROM `table1`"
sqlSelect
.from('table1')
.select('id', 'name')
.as('label')
.build();"SELECT `id`, `name` AS `label` FROM `table1`"
sqlSelect
.from('table1')
.select('id', 'name')
.select('title')
.as('label')
.build();"SELECT `id`, `name`, `title` AS `label` FROM `table1`"
sqlSelect
.from('table1')
.select('id', 'name')
.as('label')
.select('title')
.build();"SELECT `id`, `name` AS `label`, `title` FROM `table1`"
sqlSelect
.from('table1')
.select([ 'id', 'name' ])
.build();"SELECT `id`, `name` FROM `table1`"
sqlSelect
.from('table1')
.select()
.build();"SELECT * FROM `table1`"
sqlSelect
.from('table1')
.select(['abc','def', { as: 'ghi', sql: 'SOMEFUNC(ghi)' }])
.build();sqlSelect
.from('table1')
.select(['abc','def', { a: 'ghi', sql: 'SOMEFUNC(ghi)' }])
.build();"SELECT `abc`, `def`, (SOMEFUNC(ghi)) AS `ghi` FROM `table1`"
sqlSelect
.calculateFoundRows()
.from('table1')
.build();"SELECT SQL_CALC_FOUND_ROWS * FROM `table1`"
sqlSelect
.calculateFoundRows()
.from('table1')
.select('id')
.build();"SELECT SQL_CALC_FOUND_ROWS `id` FROM `table1`"
sqlSelect
.from('table1')
.select('id1', 'name')
.from('table2', 'id2', 'id1')
.select('id2')
.build();"SELECT `t1`.`id1`, `t1`.`name`, `t2`.`id2` FROM `table1` `t1` JOIN `table2` `t2` ON `t2`.`id2` = `t1`.`id1`"
sqlSelect
.from('table1')
.select('id1')
.from('table2', 'id2', 'id1', { joinType: 'left inner' })
.select('id2')
.build();"SELECT `t1`.`id1`, `t2`.`id2` FROM `table1` `t1` LEFT INNER JOIN `table2` `t2` ON `t2`.`id2` = `t1`.`id1`"
sqlSelect
.from('table1')
.select('id1', 'name')
.from('table2', 'id2', 'table1', 'id1')
.select('id2')
.build();"SELECT `t1`.`id1`, `t1`.`name`, `t2`.`id2` FROM `table1` `t1` JOIN `table2` `t2` ON `t2`.`id2` = `t1`.`id1`"
sqlSelect
.from('table1')
.from('table2', 'id2', 'table1', 'id1')
.count()
.build();"SELECT COUNT(*) FROM `table1` `t1` JOIN `table2` `t2` ON `t2`.`id2` = `t1`.`id1`"
sqlSelect
.from('table1')
.from('table2', 'id2', 'table1', 'id1')
.count(null, 'c')
.build();"SELECT COUNT(*) AS `c` FROM `table1` `t1` JOIN `table2` `t2` ON `t2`.`id2` = `t1`.`id1`"
sqlSelect
.from('table1')
.from('table2', 'id2', 'table1', 'id1')
.count('id')
.build();"SELECT COUNT(`t2`.`id`) FROM `table1` `t1` JOIN `table2` `t2` ON `t2`.`id2` = `t1`.`id1`"
sqlSelect
.from('table1')
.count('id')
.from('table2', 'id2', 'table1', 'id1')
.count('id')
.build();"SELECT COUNT(`t1`.`id`), COUNT(`t2`.`id`) FROM `table1` `t1` JOIN `table2` `t2` ON `t2`.`id2` = `t1`.`id1`"
sqlSelect
.from('table1')
.from('table2', 'id2', 'table1', 'id1')
.count('id')
.count('col')
.build();"SELECT COUNT(`t2`.`id`), COUNT(`t2`.`col`) FROM `table1` `t1` JOIN `table2` `t2` ON `t2`.`id2` = `t1`.`id1`"
sqlSelect
.from('table1')
.from('table2', 'id2', 'table1', 'id1')
.fun('AVG', 'col')
.build();"SELECT AVG(`t2`.`col`) FROM `table1` `t1` JOIN `table2` `t2` ON `t2`.`id2` = `t1`.`id1`"
sqlSelect
.from('table1')
.from('table2',['id2a', 'id2b'], 'table1', ['id1a', 'id1b'])
.count('id')
.build();"SELECT COUNT(`t2`.`id`) FROM `table1` `t1` JOIN `table2` `t2` ON `t2`.`id2a` = `t1`.`id1a` AND `t2`.`id2b` = `t1`.`id1b`"
```## Where
```js
var sqlSelect = sqlQuery.select();sqlSelect
.from('table1')
.where()
.build();"SELECT * FROM `table1`"
sqlSelect
.from('table1')
.where(null)
.build();"SELECT * FROM `table1`"
sqlSelect
.from('table1')
.where({ col: 1 })
.build();"SELECT * FROM `table1` WHERE `col` = 1"
sqlSelect
.from('table1')
.where({ col: 0 })
.build();"SELECT * FROM `table1` WHERE `col` = 0"
sqlSelect
.from('table1')
.where({ col: null })
.build();"SELECT * FROM `table1` WHERE `col` IS NULL"
sqlSelect
.from('table1')
.where({ col: sql.eq(null) })
.build();"SELECT * FROM `table1` WHERE `col` IS NULL"
sqlSelect
.from('table1')
.where({ col: sql.ne(null) })
.build();"SELECT * FROM `table1` WHERE `col` IS NOT NULL"
sqlSelect
.from('table1')
.where({ col: undefined })
.build();"SELECT * FROM `table1` WHERE `col` IS NULL"
sqlSelect
.from('table1')
.where({ col: false })
.build();"SELECT * FROM `table1` WHERE `col` = false"
sqlSelect
.from('table1')
.where({ col: "" })
.build();"SELECT * FROM `table1` WHERE `col` = ''"
sqlSelect
.from('table1')
.where({ col: true })
.build();"SELECT * FROM `table1` WHERE `col` = true"
sqlSelect
.from('table1')
.where({ col: 'a' })
.build();"SELECT * FROM `table1` WHERE `col` = 'a'"
sqlSelect
.from('table1')
.where({ col: 'a\'' })
.build();"SELECT * FROM `table1` WHERE `col` = 'a\\''"
sqlSelect
.from('table1')
.where({ col: [ 1, 2, 3 ] })
.build();"SELECT * FROM `table1` WHERE `col` IN (1, 2, 3)"
sqlSelect
.from('table1')
.where({ col: [] })
.build();"SELECT * FROM `table1` WHERE FALSE"
sqlSelect
.from('table1')
.where({ col1: 1, col2: 2 })
.build();"SELECT * FROM `table1` WHERE `col1` = 1 AND `col2` = 2"
sqlSelect
.from('table1')
.where({ col1: 1 }, { col2: 2 })
.build();"SELECT * FROM `table1` WHERE (`col1` = 1) AND (`col2` = 2)"
sqlSelect
.from('table1')
.where({ col: 1 }).where({ col: 2 })
.build();"SELECT * FROM `table1` WHERE (`col` = 1) AND (`col` = 2)"
sqlSelect
.from('table1')
.where({ col1: 1, col2: 2 }).where({ col3: 3 })
.build();"SELECT * FROM `table1` WHERE (`col1` = 1 AND `col2` = 2) AND (`col3` = 3)"
sqlSelect
.from('table1')
.from('table2', 'id', 'id')
.where('table1', { col: 1 }, 'table2', { col: 2 })
.build();"SELECT * FROM `table1` `t1` JOIN `table2` `t2` ON `t2`.`id` = `t1`.`id` WHERE (`t1`.`col` = 1) AND (`t2`.`col` = 2)"
sqlSelect
.from('table1')
.from('table2', 'id', 'id')
.where('table1', { col: 1 }, { col: 2 })
.build();"SELECT * FROM `table1` `t1` JOIN `table2` `t2` ON `t2`.`id` = `t1`.`id` WHERE (`t1`.`col` = 1) AND (`col` = 2)"
sqlSelect
.from('table1')
.where({ col: sql.gt(1) })
.build();"SELECT * FROM `table1` WHERE `col` > 1"
sqlSelect
.from('table1')
.where({ col: sql.gte(1) })
.build();"SELECT * FROM `table1` WHERE `col` >= 1"
sqlSelect
.from('table1')
.where({ col: sql.lt(1) })
.build();"SELECT * FROM `table1` WHERE `col` < 1"
sqlSelect
.from('table1')
.where({ col: sql.lte(1) })
.build();"SELECT * FROM `table1` WHERE `col` <= 1"
sqlSelect
.from('table1')
.where({ col: sql.eq(1) })
.build();"SELECT * FROM `table1` WHERE `col` = 1"
sqlSelect
.from('table1')
.where({ col: sql.ne(1) })
.build();"SELECT * FROM `table1` WHERE `col` <> 1"
sqlSelect
.from('table1')
.where({ col: sql.between('a', 'b') })
.build();"SELECT * FROM `table1` WHERE `col` BETWEEN 'a' AND 'b'"
sqlSelect
.from('table1')
.where({ col: sql.not_between('a', 'b') })
.build();"SELECT * FROM `table1` WHERE `col` NOT BETWEEN 'a' AND 'b'"
sqlSelect
.from('table1')
.where({ col: sql.like('abc') })
.build();"SELECT * FROM `table1` WHERE `col` LIKE 'abc'"
sqlSelect
.from('table1')
.where({ col:
sql.not_like('abc') })
.build();"SELECT * FROM `table1` WHERE `col` NOT LIKE 'abc'"
sqlSelect
.from('table1')
.where({ col: sql.not_in([ 1, 2, 3 ]) })
.build();"SELECT * FROM `table1` WHERE `col` NOT IN (1, 2, 3)"
sqlSelect
.from('table1')
.where({ col: {
not_in: ([ 1, 2, 3 ])
})
.build();"SELECT * FROM `table1` WHERE `col` NOT IN (1, 2, 3)"
sqlSelect
.from('table1')
.where({ col: {
between: [
"2019-03-06T00:00:16.000Z",
"2019-03-06T00:09:16.000Z",
]
})
.build();"SELECT * FROM `table1` WHERE `col` BETWEEN ('2019-03-06T00:00:16.000Z', '2019-03-06T00:09:16.000Z')"
or
// timezone = 'locale' or Dialect.type === `mysql`
"SELECT * FROM `table1` WHERE `col` BETWEEN ('2019-03-06 T00:00:16.000', '2019-03-06 00:09:16.000')"sqlSelect
.from('table1')
.where({ __sql: [["LOWER(`stuff`) LIKE 'peaches'"]] })
.build();"SELECT * FROM `table1` WHERE LOWER(`stuff`) LIKE 'peaches'"
sqlSelect
.from('table1')
.where({ __sql: [["LOWER(`stuff`) LIKE ?", ['peaches']]] })
.build();"SELECT * FROM `table1` WHERE LOWER(`stuff`) LIKE 'peaches'"
sqlSelect
.from('table1')
.where({ __sql: [["LOWER(`stuff`) LIKE ? AND `number` > ?", ['peaches', 12]]] })
.build();"SELECT * FROM `table1` WHERE LOWER(`stuff`) LIKE 'peaches' AND `number` > 12"
sqlSelect
.from('table1')
.where({ __sql: [["LOWER(`stuff`) LIKE ? AND `number` == ?", ['peaches']]] })
.build();"SELECT * FROM `table1` WHERE LOWER(`stuff`) LIKE 'peaches' AND `number` == NULL"
```## Order
```js
var sqlSelect = sqlQuery.select();sqlSelect
.from('table1')
.order('col')
.build();"SELECT * FROM `table1` ORDER BY `col` ASC"
sqlSelect
.from('table1')
.order('col', 'A')
.build();"SELECT * FROM `table1` ORDER BY `col` ASC"
sqlSelect
.from('table1')
.order('col', 'Z')
.build();"SELECT * FROM `table1` ORDER BY `col` DESC"
sqlSelect
.from('table1')
.order('col').order('col2', 'Z')
.build();"SELECT * FROM `table1` ORDER BY `col` ASC, `col2` DESC"
sqlSelect
.from('table1')
.order('col', [])
.build();"SELECT * FROM `table1` ORDER BY col"
sqlSelect
.from('table1')
.order('?? DESC', ['col'])
.build();"SELECT * FROM `table1` ORDER BY `col` DESC"
sqlSelect
.from('table1')
.order('ST_Distance(??, ST_GeomFromText(?,4326))', ['geopoint', 'POINT(-68.3394 27.5578)'])
.build();"SELECT * FROM `table1` ORDER BY ST_Distance(`geopoint`, ST_GeomFromText('POINT(-68.3394 27.5578)',4326))"
```## Limit
```js
var sqlSelect = sqlQuery.select();sqlSelect
.from('table1')
.limit(123)
.build();"SELECT * FROM `table1` LIMIT 123"
sqlSelect
.from('table1')
.limit('123456789')
.build();"SELECT * FROM `table1` LIMIT 123456789"
```## Select function
```js
var sqlSelect = sqlQuery.select();sqlSelect
.from('table1')
.fun('myfun', 'col1')
.build();"SELECT MYFUN(`col1`) FROM `table1`"
sqlSelect
.from('table1')
.fun('myfun', [ 'col1', 'col2'])
.build();"SELECT MYFUN(`col1`, `col2`) FROM `table1`"
sqlSelect
.from('table1')
.fun('dbo.fnBalance', [ 80, null, null], 'balance')
.build();"SELECT DBO.FNBALANCE(80, NULL, NULL) AS `balance` FROM `table1`"
sqlSelect
.from('table1')
.fun('myfun', [ 'col1', 'col2'], 'alias')
.build();"SELECT MYFUN(`col1`, `col2`) AS `alias` FROM `table1`"
sqlSelect
.from('table1')
.fun('myfun', [ 'col1', sqlQuery.Text('col2') ], 'alias')
.build();"SELECT MYFUN(`col1`, 'col2') AS `alias` FROM `table1`"
```## Insert
```js
var sqlInsert = sqlQuery.insert();sqlInsert
.into('table1')
.build();"INSERT INTO `table1`"
sqlInsert
.into('table1')
.set({})
.build();"INSERT INTO `table1` VALUES()"
sqlInsert
.into('table1')
.set({ col: 1 })
.build();"INSERT INTO `table1` (`col`) VALUES (1)"
sqlInsert
.into('table1')
.set({ col1: 1, col2: 'a' })
.build();"INSERT INTO `table1` (`col1`, `col2`) VALUES (1, 'a')"
```## Update
```js
var sqlUpdate = sqlQuery.update()sqlUpdate
.into('table1')
.build();"UPDATE `table1`"
sqlUpdate
.into('table1')
.set({ col: 1 })
.build();"UPDATE `table1` SET `col` = 1"
sqlUpdate
.into('table1')
.set({ col1: 1, col2: 2 })
.build();"UPDATE `table1` SET `col1` = 1, `col2` = 2"
sqlUpdate
.into('table1')
.set({ col1: 1, col2: 2 }).where({ id: 3 })
.build();"UPDATE `table1` SET `col1` = 1, `col2` = 2 WHERE `id` = 3"
```[node-sql-query]:./Readme_orig.md