0.2.3 • Published 6 years ago

@axolo/leosql v0.2.3

Weekly downloads
-
License
MIT
Repository
github
Last release
6 years ago

LeoSQL

HTTPquerystringbody转换为存储引擎(比如MySQL)能够理解和执行的格式, 同时确保存储安全,不被恶意注入攻击,是一项不小的挑战。常规的检索数据方法有:

  • 条件(WHERE
    • 等于(_eq
    • 不等于(_ne
    • 大于(_gt
    • 小于(_lt
    • 大于等于(_gte
    • 小于等于(_lte
    • 含有(_have
    • 开头含有(_start
    • 结尾含有(_end
  • 关系(_logic
    • 且(AND
    • 或(OR
  • 排序(ORDER BY
    • 顺序(_asc
    • 逆序(_desc
  • 分页(LIMIT
    • 页码(_page
    • 单页记录数(_limit
  • 全文(FULLTEXT
    • 含有(_q
请求类型
_method字符串或数组方法,尽量由程序生成
_table字符串或数组表,尽量由程序生成
_column字符串或数组列,尽量由程序生成
_value字符串或数组值,用于匹配INSERTUPDATE时的_column
*_eq字符串或数组等于,* 表示字段名
*_ne字符串或数组不等于,* 表示字段名
*_gt字符串大于,* 表示字段名
*_lt字符串小于,* 表示字段名
*_gte字符串大于等于(不小于),* 表示字段名
*_lte字符串小于等于(不大于),* 表示字段名
*_have字符串含有,* 表示字段名
*_start字符串开头含有,* 表示字段名
*_end字符串结尾含有,* 表示字段名
_logic字符串或数组条件之间的逻辑关系,默认为AND。
_asc字符串或数组顺序
_desc字符串或数组逆序
_page正整数分页的页码
_limit正整数分页的单页记录数
_q字符串全文检索,对表进行全文搜索,建议独立使用(未实现)

其中_logicstringarray两种类型,类型不同解析方法也不同,具体如下:

  • string

    统一为各个条件匹配指定的关系。比如_logic=or,则所有条件之间的关系均为OR

  • array

    _logic数组顺序逐一为各个条件匹配关系,条件结束匹配完成,数组超出的部分直接丢弃。 数组长度不足时,后续未匹配到的条件关系均默认为AND

安装

npm install @axolo/leosql

方法

参见LeoSQL文档

示例

const qs = require('qs')
const sqlFormatter = require('sql-formatter')
const leosql = require('../src')

const query = `_table=user\
&_column=id&_column=name&_column=mail\
&_value=ID&_value=NAME&_value=MAIL\
&spawned_gte=20190101&spawned_lte=20190105\
&name=guest&name_ne=admin&name_ne=root\
&destroied_eq=true&destroied_eq=false\
&mail_end=%40mail.com\
&_logic=and&_logic=and&_logic=or\
&_desc=spawned&_desc=modified&_asc=mail\
&_limit=20&_page=3`

const leo = leosql(qs.parse(query))

console.log(sqlFormatter.format(leo.select))

相当于生成如下 MySQL 语句

SELECT
  `id`,
  `name`,
  `mail`
FROM
  `user`
WHERE
  (
    `name` IN ('guest')
    OR `name` NOT IN ('admin', 'root')
  )
  AND `spawned` >= '20190101'
  AND `spawned` <= '20190105'
  AND `destroied` IN ('true', 'false')
  AND `mail` like '%@mail.com'
ORDER BY
  `mail` ASC,
  `spawned` DESC,
  `modified` DESC
LIMIT
  40, 20

测试

yarn test

版本

TODO

  • 条件分组,考虑以括号分组条件,更加贴近SQL,避免产生错误。
  • 排序先后顺序,考虑排序的先后顺序。

0.2.3

精简NPM发布内容。

0.2.2

组合处理逻辑关系OR。

0.2.1

调整版本号。

0.2.0

方法改为属性。

0.1.3

接受无需转义的请求。

0.1.2

更新引入方式,符合用户习惯。

0.1.1

更新LIMIT逻辑,避免LIMIT 0, 0

0.1.0

重构,且不兼容0.0.x

0.0.x

历史版本,不再维护。

0.2.3

6 years ago

0.2.2

6 years ago

0.2.1

6 years ago

0.2.0

6 years ago

0.1.4

6 years ago

0.1.3

6 years ago

0.1.2

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago

0.0.9

6 years ago

0.0.8

6 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago

0.0.4

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

7 years ago