New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

@axolo/leosql

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@axolo/leosql

Generate MySQL from qs.parse(Querystring).

latest
Source
npmnpm
Version
0.2.3
Version published
Weekly downloads
5
66.67%
Maintainers
1
Weekly downloads
 
Created
Source

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

历史版本,不再维护。

Keywords

SQL Generator

FAQs

Package last updated on 24 Jul 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts